我在SSMS中运行了三个查询,无法理解每个查询运行所需的时间差异。前两个查询提取一个月的数据,第三个提取两个月的数据。所有查询都正常工作,但我无法理解第二个查询如何运行这么长时间。 查询,返回的记录数和每个查询所用的时间如下: 谁能解释一下呢?
SELECT *
FROM [vw_Movement]
WHERE ShiftDateTime BETWEEN '1 Aug 14 6:00' AND '31 Aug 14 18:00'
(Rcds returned=16,342, time=0 secs)
SELECT *
FROM [vw_Movement]
WHERE ShiftDateTime BETWEEN '1 Sep 14 6:00' AND '30 Sep 14 18:00'
(Rcds returned=14,468, time=24 secs)
SELECT *
FROM [vw_Movement]
WHERE ShiftDateTime BETWEEN '1 Aug 14 6:00' AND '30 Sep 14 18:00'
(Rcds returned=30,810, time=0 secs)
答案 0 :(得分:0)
您是否看过执行计划(SSMS中的CTL-L)?您不会说基础数据是否在视图或表格中,但是从vw_前缀开始,我将继续查看。
因此,您可能还想尝试查看视图定义本身,将其作为新查询复制到SSMS中,将WHERE语句放在最后,并分析整个查询而不仅仅是视图。也许通过评论一些联接,你可以缩小问题范围。
答案 1 :(得分:0)
可能与
有关(1)统计信息 - 您可以在维护窗口期间更新该视图的基础表的统计信息。人们警告在正常工作时间运行更新统计数据,我觉得这取决于您的工作量。更新统计数据不会锁定我的经验应该没问题,但这实际上取决于数据库服务器/主机可以处理多少。
(2)在程序缓存中缓存的错误查询计划。如果您在互联网上搜索,您可以找到专门删除特定缓存查询计划的方法。糟糕的计划也与糟糕的旧统计数据有关。
仅供参考 - 通过更新统计信息,您可以自动重新编译查询,因为统计信息会发生变化。不应该采取(2)的行动。