[英]SQL Server ignoring index and performs table scan
它基于估计的行数124844决定表扫描,而实际行数仅为831。
优化器认为,遍历124844最好在表中进行扫描,而不是索引搜索。
还需要检查除索引之外选择的其他列。 如果选择了除“索引”以外的其他列,则必须在执行索引查找后执行“ RID查找”,Optimizer可能会认为与其优先选择“表扫描”而不是RID查找。
第一个解决方案:更新统计信息并为优化器提供足够的信息以选择更好的计划。
您可以提供完整的查询吗? 我看到您正在提取一系列跨越3个月的数据 。 如果此范围占数据集的较大百分比,则可能由于您试图返回如此大的数据百分比而正在扫描。 如果索引的选择性不够高,则不会被选择。
也...
您在过滤器中有一个OR
子句。 通过查看屏幕快照中提供的谓词,您看起来好像在两个不同的过滤器之间缺少了()
。 这也可能导致扫描。
还有一件事... OR
子句有时可能会导致错误的计划-另一种方法是将查询分为两个UNIONED
查询,每个查询中都有不同的OR
。 如果您提供查询,我应该能够为您提供一个重写的版本以显示此内容。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.