如何优化SQL Server TSQL

来源:互联网 发布:淘宝台湾客户无法下单 编辑:程序博客网 时间:2024/06/08 02:42

一:检查Index
1.Cluster Index (检查每个表是否有Primary Key)
2.No-Cluster Index on these columns
-经常需要查询的字段
-Foreign Key
-用来连接其他表的字段
-Order by 的字段
二:优化索引碎片Index Fragmentation
1.对Database使用脚本
SELECT object_name(dt.object_id) Tablename,si.name
IndexName,dt.avg_fragmentation_in_percent AS
ExternalFragmentation,dt.avg_page_space_used_in_percent AS
InternalFragmentation
FROM
(
    SELECT object_id,index_id,avg_fragmentation_in_percent,avg_page_space_used_in_percent
    FROM sys.dm_db_index_physical_stats (db_id('ReportServer'),null,null,null,'DETAILED'
)
WHERE index_id <> 0) AS dt INNER JOIN sys.indexes si ON si.object_id=dt.object_id
AND si.index_id=dt.index_id AND dt.avg_fragmentation_in_percent>10
AND dt.avg_page_space_used_in_percent<75 ORDER BY avg_fragmentation_in_percent DESC
2.Rebuild Index with high fragmentation
三:对Table,View,User Define Function也可以建立Index
1.XML Column加上Primary XML Index
四:针对复杂性计算的数据,定义Schedule Operation (聚集报表的做法)
五:把Application的TSQL代码移到Database (SP,Function,View),利用SQL Server进行优化
六:对SQL 脚本本身进行优化
1.不要使用Select *
2.子查询里面不要使用Count()
3.不同类型的Column不要进行join
4.避免使用Dynamatic SQL(不能进行优化)
5.User Defined Function:不要重复调用,应该先用变量保存为以后使用
6.SP不要用SP_XXX前缀(区别与System SP),参数应该有Default Value
7.避免使用Trigger
8.Transaction:in SQL Server 2005, Try...Catch Block
9.Other Resource:http://code.msdn.microsoft.com/SQLExamples/Wiki/View.aspx?title=Best%20practices%20%2C%20Design%20and%20Development%20guidelines%20for%20Microsoft%20SQL%20Server
10.使用查询分析器