【问题标题】:Order of ANDS in Where clause for greatest performanceWhere 子句中的 ANDS 顺序以获得最佳性能
【发布时间】:2011-04-17 21:05:09
【问题描述】:

我的想法是,如果我将过滤掉更多行的 AND 放在过滤掉少量行的 AND 之前,我的查询应该运行得更快,因为 And 语句之间的选择集要小得多。

但是,SQL 语句的 WHERE 子句中的 AND 顺序是否真的对 SQL 的性能有那么大的影响,或者引擎是否已经为此进行了优化?

【问题讨论】:

    标签: sql performance


    【解决方案1】:

    这真的取决于优化器。

    这不应该很重要,因为无论你如何描述它,优化器的工作都是找出运行查询的最佳方式。

    实际上,没有优化器是完美的,因此您可能会发现重新排序子句确实会对特定查询产生影响。唯一确定的方法是使用您自己的架构、数据等进行测试。

    【讨论】:

    • 我正在使用 ilike 语句运行一个查询,and 子句的顺序很重要。 select * from table where x ilike 'abcde' and time >= 2015-12-28 比 select * from table where time >= 2015-12-28 and x ilike 'abcde' 慢 10 倍
    【解决方案2】:

    大多数 SQL 引擎都经过优化,可以为您完成这项工作。但是,我发现尝试先切开最大的桌子会产生很大的不同——这没有什么坏处!

    【讨论】:

      【解决方案3】:

      很大程度上取决于索引的设置方式。如果存在结合了两个键的索引,优化器应该能够通过单个索引搜索来回答查询。否则,如果两个键都存在独立索引,则优化器可能会获取满足每个键的记录列表并合并列表。如果一个条件存在索引但另一个条件不存在,则优化器应首先使用索引列表进行过滤。在任何这些情况下,条件的列出顺序都无关紧要。

      如果条件都不适用,则指定条件的顺序可能会影响评估顺序,但由于数据库必须获取每条记录以满足查询,因此获取时间可能会使时间相形见绌评估条件。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-03-26
        • 1970-01-01
        • 2013-05-07
        • 2022-01-20
        • 1970-01-01
        • 1970-01-01
        • 2022-01-20
        • 2011-05-01
        相关资源
        最近更新 更多