SQL Server执行计划
开启执行计划的方法:
--显示有关由Transact-SQL 语句生成的磁盘活动量的信息
SET STATISTICS IO ON
--关闭有关由Transact-SQL 语句生成的磁盘活动量的信息
SET STATISTICS IO OFF
--显示[返回有关语句执行情况的详细信息,并估计语句对资源的需求]
SET SHOWPLAN_ALL ON
--关闭[返回有关语句执行情况的详细信息,并估计语句对资源的需求]
SET SHOWPLAN_ALL OFF
注:SET STATISTICS IO 和 SET SHOWPLAN_ALL 是互斥的。
使用执行计划的例子:
执行:SET STATISTICS IO ON
此时再执行该SQL:SELECT * FROM T_UserInfo WHERE USERID='ABCDE6EF'
切换到消失栏显示如下:
表'T_UserInfo'。扫描计数1,逻辑读1 次,物理读0 次,预读0 次。
上面四个值的意思:
执行的扫描次数;
从数据缓存读取的页数;
从磁盘读取的页数;
为进行查询而放入缓存的页数
注:如果对于一个SQL查询有多种写法,那么这四个值中的逻辑读(logical reads)决定了哪个是最优化的。
执行计划调优的建议:
在进行语句级的调优时,我们首先要看I/O、成本开销的比例,避免因为选择度的问题造成错误的执行计划(如全表扫描)。
下一步,我们需要确保SQL的执行在CPU、内存、I/O之间达到一个平衡。
如果你的内存比较紧张,我们就想办法避免那些占用太多内存的运算符的使用。
另外,成本的开销大,不一定代表执行时间就慢。采用并行的方式虽然可以提高执行速度,但会影响系统的并发性。
只有我们多试,才能找到一个最佳的平衡点。
参考文章:
执行计划 http://www.jb51.net/article/23611.htm
调整SQLSERVER非最优执行计划 http://www.cnblogs.com/tom-fu/archive/2008/11/19/1285436.html
SQLServer执行计划成本(一)(二)(三) http://jqueryasp.com/Article/2011/07/21/20110721150415.html
浙公网安备 33010602011771号