Estimated and Actual Execution Plans

https://www.simple-talk.com/sql/performance/execution-plan-basics/

文章已经分析的很详细了,另外补充一些。当分析一个超复杂的存储过程时,例如一个存储过程中又调用了多个其他的存储过程,且每个都很复杂,涉及多个insert,update语句。执行计划具有以下特点:

1, 执行计划按执行的先后顺序打印出所有insert,update等语句的执行。例如在执行过程中进入了另一个存储过程,则传入这个存储过程中的语句。也就是说多个存储过程的执行计划按执行先后顺序穿插在一起。

2, Estimated Execution Plans有一个很大的局限性,那就是如果语句使用了临时表,则无法得到Estimated Execution Plans。原因是Estimated Execution Plan不会真正执行sql语句,所以无法得知临时表的统计数据。Actual Execution Plans则没有这个问题。

3,而Actual Execution Plans的问题是:你可以使用Estimated Execution Plans预估sql的执行情况,大家都知道查看Estimated Execution Plans是很快的。而Actual Execution Plans则需要真正去执行sql以得到结果,因此有时会非常慢。例如今天我想得到一个存储过程的完整执行计划(其中还调用了其他很多存储过程),运行时间大概是9小时。主要是其中某一个存储过程太慢导致的。此时为了得到完整的Actual Execution Plans,我不得不执行该sql,并等待了9小时才得到完整的Actual Execution Plans。期间可以看到随着sql的运行,新的insert\update等语句的执行计划被不断打印出来。


因此我们可以认为Actual Execution Plans其实就是sql实际运行的过程的统计数据。

你可能感兴趣的:(Estimated and Actual Execution Plans)