【发布时间】:2009-12-29 21:11:04
【问题描述】:
我正在尝试加快我拥有的长时间运行的查询(运行大约需要 10 分钟......)。为了追踪查询的哪一部分花费我最多的时间,我在运行它时包含了实际执行计划,并发现一个占 55% 的特定部分(下面的屏幕截图)
alt text http://img109.imageshack.us/img109/9571/53218794.png
这对我来说似乎不太正确,所以我在这个麻烦部分之前和之后添加了 Print '1' 和 Print '2'。当我只运行查询 17 秒然后取消它时,我假设的 1 和 2 打印输出意味着它在前 17 秒内通过了该部分。
alt text http://img297.imageshack.us/img297/4739/66797633.png
是我做错了什么还是我的执行计划误导了我?
【问题讨论】:
-
你能提供完整的查询吗?
-
看起来您发布的内容不是查询的问题部分。看起来您要切断的内容更多......这就是问题所在。
-
为什么说我贴的部分不是查询的问题部分?我假设一个占 55% 的部分应该花费大约 10 分钟的一半来运行,我错了吗?您还使用哪些其他方法来确定查询的问题部分?
-
如果可以避免的话,我宁愿不在线发布整个查询。只用执行计划就不能找到问题部分吗?
-
通过查看执行计划可以弄清楚很多,但您只是展示了其中的一部分。此外,时间问题可能与查询成本没有直接关系。还有更多可能发生的事情;这就是为什么查看整个交易很重要的原因。
标签: sql sql-server sql-server-2005 sql-execution-plan