我有一条SQL语句(我无法在此发布)。当我查看其执行计划时,我发现大部分时间都在进行排序,然后进行索引扫描。
我有什么办法可以减少花在各种各样的时间吗?任何一种指数?我能做些什么来减少在索引扫描中花费的时间?
答案 0 :(得分:1)
聚簇索引扫描本质上是一个表扫描,其中正在检查表中的每一行。
您可能在该表上缺少此查询的索引...查看您正在过滤/加入的字段,并为这些列添加索引。
这些索引也可能会阻止嵌套循环/排序操作。
答案 1 :(得分:0)
我只是在这里大声问道,但您的查询中是否包含任何排名功能?我问,因为我在排序之后就看到了段操作符,如果我做了类似ROW_NUMBER()或RANK()的操作,我通常会看到它们。所有这些运算符都需要在OVER子句中按顺序排序,因此如果您的数据尚未按该度量标准排序(即,它不会在数据被拉出的表/索引上以这种方式排序) ,然后引擎将必须对数据进行排序以获得正确的结果。
答案 2 :(得分:0)
首先,如果您希望人们认真对待您,特别是如果您想要准确的回答和帮助,那么您必须包含具体信息。如果有人要帮助他们需要足够的信息来重现你的条件,以便他们自己验证建议实际上有什么帮助。信不信由你,那些回应的人是如此伟大(感谢所有帮助的人),他们通常会测试他们说的话。如果您有代码限制,因为它的工作相关。您应该有足够的理解能够创建与其他表和列类似的示例,以显示问题而不会影响代码。
对于Point,您的样本执行以下操作 1)嵌套循环: 2)排序
在这种情况下,完成SORT是因为(嵌套循环)的结果不是按照需要的方式进行ORDERED。由于(嵌套循环)的来源是顶部表(聚集索引扫描),它按照(Clusted Inex Key)的顺序读取,显然与所需的SORT不同。
如果在索引的KEY的ss部分上实际排序的字段和查询中所有需要的列都包含在索引中,那么它应该在该索引上使用“索引扫描”,该索引应该是ALREADY按ORDER BY KEY排序,可以避免SORT。
我对此进行了一些测试,显然SQL Server DOES使用了索引(正如预期的那样),但STILL执行了SORT(不是因为数据流已经被排除而已经过了)。这可能应该报告给MS,因为优化器应该认识到这一点。
希望这会有所帮助..