【发布时间】:2013-09-09 17:01:09
【问题描述】:
实际上这是一个简单的问题,但我缺乏经验,也不知道如何进行数据库系统的内部优化(一般而言,但在我的特定情况下是 T-SQL)。
假设我有一个包含整数数据字段的数据库(为了简化 1-3):
table Data (D1, D2, D3)
我有一组匹配条件:
D1 > 3 D2 < 100 D3 all
D1 >= 50 D2 all D3 > 50
and so on...
执行查询的天真方法是 AND 条件的每个表达式和 OR 每个条件表达式。但显然优化的查询将是 (见编辑)D1 >= 50 and D2 < 100 and D3 > 50
那么问题来了:数据库(在我的例子中是 T-SQL)是否能够优化我的幼稚查询?
如果不是:有人能指出我正确的方向吗(我确信必须有一些算法来解决我无法弄清楚的情况)。
编辑:
显然优化假设是错误的:-D
D1 >= 50 D2 < 100 D3 all
D1 >= 50 D2 all D3 > 50
and so on...
这个可以优化D1 >= 50 and D2 < 100 or D1 >= 50 and D3 > 50
到D1 >= 50 and (D2 < 100 or D3 = 50)
不知何故,我假设数据库应该如此智能(如果我想到复杂的查询变得多么复杂,这对数据库来说肯定是小菜一碟)。
问题应该是:它可以处理多少标准(X 数据字段和 Y 标准)。但这是我必须弄清楚的事情。当我们在这里收集一些日期时我会报告(可能需要一段时间)。
【问题讨论】:
-
您是如何获得“标准表达式”的?这是某种动态sql吗?他们在某个地方的另一张桌子上吗?如果他们在另一个表中 - 那么你可以做一个非常简单的连接。
-
@Randy 感谢您的回复!我们还没有决定。我们现在拥有的是数据表。条件是当前条件对象的集合(字段、比较类型、值)。我看不到以非动态方式构建查询的机会,因为运算符也是动态的。
-
我认为这是一个重大决定:) - 也许考虑将它们放在一个表中 - 如果常规连接不起作用,您可以查询它以生成运行时动态 sql 语句。
标签: database tsql query-optimization