【问题标题】:Query where redundancy and optimization查询哪里冗余和优化
【发布时间】: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 &gt;= 50 and D2 &lt; 100 and D3 &gt; 50(见编辑)

那么问题来了:数据库(在我的例子中是 T-SQL)是否能够优化我的幼稚查询?

如果不是:有人能指出我正确的方向吗(我确信必须有一些算法来解决我无法弄清楚的情况)。

编辑:

显然优化假设是错误的:-D

D1 >= 50     D2 < 100    D3 all
D1 >= 50     D2 all      D3 > 50
and so on...

这个可以优化
D1 &gt;= 50 and D2 &lt; 100 or D1 &gt;= 50 and D3 &gt; 50

D1 &gt;= 50 and (D2 &lt; 100 or D3 = 50)

不知何故,我假设数据库应该如此智能(如果我想到复杂的查询变得多么复杂,这对数据库来说肯定是小菜一碟)。

问题应该是:它可以处理多少标准(X 数据字段和 Y 标准)。但这是我必须弄清楚的事情。当我们在这里收集一些日期时我会报告(可能需要一段时间)。

【问题讨论】:

  • 您是如何获得“标准表达式”的?这是某种动态sql吗?他们在某个地方的另一张桌子上吗?如果他们在另一个表中 - 那么你可以做一个非常简单的连接。
  • @Randy 感谢您的回复!我们还没有决定。我们现在拥有的是数据表。条件是当前条件对象的集合(字段、比较类型、值)。我看不到以非动态方式构建查询的机会,因为运算符也是动态的。
  • 我认为这是一个重大决定:) - 也许考虑将它们放在一个表中 - 如果常规连接不起作用,您可以查询它以生成运行时动态 sql 语句。

标签: database tsql query-optimization


【解决方案1】:

由于不会有真正的答案,我会回答我自己的问题以提供反馈。
(如果有人愿意为此做出贡献,我仍然很高兴!)

最初的问题暗示了一个包含数据和适用于该数据的标准集合的表格。在进一步的分析中,我面临这样一个事实,即这个想法背后的整个概念是如此复杂,以至于我们不能依赖于将这个标准保存在一个单独的表中(原因:动态 API 和当你试图在没有清晰的编程库的情况下处理它时纯粹的混乱)。

所以它以动态 SQL 结束(而不是连接、存储过程等)。幸运的是,我可以通过以前的限制来减少查询的数据,这将减少大量的数据,这些数据仍然需要使用标准进行查询。我什至不再认为应用(例如)100 条标准和 10 条规则有问题。我仍然担心数据库可以在短时间内处理多少这样的查询(除了常见的工作负载)而不会爆发。

对于作为开发人员的我来说,这是一个非常巧妙的要求,可以“与之抗争”。如果有更多要说的,我会回来报告...

【讨论】:

    猜你喜欢
    • 2019-01-23
    • 2013-01-20
    • 1970-01-01
    • 1970-01-01
    • 2012-04-16
    • 2017-06-27
    • 1970-01-01
    • 2016-05-22
    • 1970-01-01
    相关资源
    最近更新 更多