我有一个中等复杂的嵌套T-SQL查询,在大多数情况下都有良好的性能,除了我每个2周付费期的开始(要处理的记录较少!)查询陷入困境数量级更慢。然后在两周一段时间的某个时刻,SQL Server(2008)确定执行计划应该改变,一切都恢复到正常速度。我有“好”和“坏”场景的执行计划,但我在这个领域是一个n00b,我不知道如何解释它们。这下我的下一步是什么?发布查询?执行计划?阅读一些文章/书?
答案 0 :(得分:1)
尝试在2周时段开始时更新查询中表格的统计信息:
DBCC UPDATE STATISTICS表名
有一些选项,比如你可以尝试的WITH FULLSCAN。请查看SQL Server文档。
答案 1 :(得分:1)
我在answers.sqlperformance.com上得到了一些帮助,虽然UPDATE STATISTICS <table>
确实有帮助,但它似乎掩盖了真正的问题。当我应该使用(SELECT COUNT(*) ...) = 0
时,我正在使用构造(SELECT * ...) IS NULL
和NOT EXISTS (SELECT * ...)
。改变这些导致在所有情况下几乎提高了一个数量级。看起来SQL Plan Optimizer在这种情况下能够更好地工作。