Sql server 性能优化基础(一)

这里先感谢大妈的分享,很好很强大。

这里回顾下

性能问题的定位:

  • IO的逻辑读取和物理读取
set statistics IO on

性能优化的重点也就是尽量减少逻辑读取(是查询所需访问从缓存区页的次数 每页8k),避免物理读取(从磁盘读取的页数)。

  • CPU的编译时间和执行时间
set statistics time on

单位时间内增加执行时间而减少编译时间,可以采用存储过程或者参数话的方式。

这里有些练习,同样的sql在大小写不同或者换行情况下是否被重新编译成新的执行计划

USE Northwind2;
DBCC FREEPROCCACHE;
GO
SELECT * FROM orders WHERE customerID = 'HANAR'
GO
-- Try it again
SELECT * FROM orders WHERE customerID = 'HANAR'
GO
SELECT * FROM orders
WHERE customerID = 'HANAR';
GO
SELECT * FROM Orders WHERE CustomerID = 'HANAR'
GO
select * from orders where customerid = 'HANAR'
GO
SELECT usecounts, cacheobjtype, objtype, [text]
FROM sys.dm_exec_cached_plans P
CROSS APPLY sys.dm_exec_sql_text (plan_handle)
WHERE cacheobjtype = 'Compiled Plan'
AND [text] NOT LIKE '%dm_exec_cached_plans%';

这里说明一个问题:含义相同的sql会因为大小写、换行的不同而重新编译成不同的执行计划。

为了避免这种重新编译的问题建议使用存储过程。

PS:自动参数化不建议使用,因为自动参数化的参数类型可能不是你想的那样。

待续...

posted on 2011-10-01 22:39  debugdotnet  阅读(271)  评论(0编辑  收藏  举报

导航