我想了解查询计划的一部分似乎搞砸了我的查询。
图片显示有一个聚簇索引搜索,后跟计算标量,然后是排序。 我不明白的部分是Compute Scalar的Estimated Rows是327,561,而为什么Sort的估计行数只有14?是否假设Compute Scalar只返回14个结果,即使它的输入估计为327,561行?
我尝试在register_hdrs表'WITH SAMPLE 100 PERCENT'上运行update statistics,它似乎根本没有改变行为。 建议的索引提高了“聚簇索引查找”的性能,但排序仍然估计行数为14,因此查询计划保持不变。 我需要它做的是选择一个不同的路径,查询中有另一个表,当被选中时,查询速度提高了大约14倍(从14-15秒运行到1秒)。我认为对排序中行数的低估是问题所在,这就是选择慢速计划的原因。
我不打算更改查询,因为应用程序以特定方式生成它,并且此时无法更改它。我正在研究如何强制SQL Server更好地估计排序中的行,我相信这会导致SQL Server选择不同的执行计划。