【发布时间】:2017-08-03 14:48:15
【问题描述】:
我们的一个查询有一点问题,该查询是通过System.Data.SqlClient.SqlCommand 在 .Net (4.5) 应用程序中执行的。
问题是,查询将执行非常慢的表扫描。所以执行计划在这里显示了Table-Scan
所以文本显示,过滤器到 Termine.Datum 和 Termine.EndDatum 导致表扫描。但是为什么 SQL-Server 会忽略索引呢? Termine.Datum 和 Termine.EndDatum 上有两个索引。我们还尝试使用 Datum 和 EndDatum 组合添加第三个。
索引都是非聚集索引,两个字段都是DateTime。
【问题讨论】:
-
显然
statistics已过时!!.. 更新统计信息尝试再次运行查询 -
同时发布查询和索引详细信息以获得更准确的响应。在这里分享执行计划brentozar.com/pastetheplan
-
两个单独的索引肯定无济于事,因为您正在尝试两个范围查询。单个组合索引可能有用,但不保证有用。
-
此外,在更新统计信息后,您可以在该特定计划上运行 DBCC FREEPROCCACHE,然后再次执行该计划以构建新的、正确的
-
我明天会拿到完整的执行计划。然后我会粘贴它。 (在我们自己的数据库上,查询速度很快,行数更多)
标签: sql-server indexing full-table-scan