【发布时间】:2020-03-08 01:22:06
【问题描述】:
我尝试了解查询优化的工作原理。我执行了以下查询:
查询 #1
SELECT *
FROM Product
WHERE price < 50000
ORDER BY id DESC
查询 #2
SELECT *
FROM Product
WHERE price > 50000
ORDER BY id DESC
所以在每个查询的执行计划中,我注意到优化器对第一个查询使用聚集索引扫描,但是对于第二个查询,首先使用排序然后嵌套循环。
这些执行计划背后的逻辑是什么?
【问题讨论】:
-
这两个查询是相同的,所以我希望它们具有相同的执行计划。此外,“嵌套循环”通常指的是
joins,并且两个查询都没有任何joins(假设Product是一个表而不是一个视图)。 -
对于相同的查询,可能是在执行之间更新了统计信息,导致不同的计划。
-
我更正了查询中的错误
-
他们不一样。它们是比较的两个方面,统计数据可能会说第一个的返回数据比第二个少得多。
标签: sql sql-server optimization