数据库优化指南
记录自己对公司OA系统进行优化的过程!
这里讨论的主要是"索引优化",请先看一下下面的文章
引用:
sql Server索引优化
http://www.zxlm.cn/fh/viewthread.php?tid=1654
公司OA运行了二年多,数据量3G,因为其中涉及了几个视图,造成某些应用的速度极慢.
最好选择一个在线人数最少的时候,或者是在本地的系统上进行分析.
首先打开SQL事件探查器,新建一个跟踪
在跟踪属性中选择模板名为"SQLProfiler_Duration"
切换到事件标签中,把选定的事件类中的"RPC:Completed"去掉(如果你的应用中使用了存储过程则可以保留)
再切换到"筛选"标签中,在"跟踪事件准则"中选中CPU->大于或等于,填入一个你认为运行一条SQL语句你所能接受的时间如"500"
再找到选中"DatabaseID"->等于,填入你需要分析的数据库的ID
引用:
(知道数据名称如何取得数据的ID)
在查询分析器中运行
select name,dbid from master..sysdatabases where name='数据库的名字'
再点击"运行.从而开始你设定的事件跟踪.
然后执行应用中你认为最慢的的那些模板的操作.
一段时间后,在跟踪的窗口后找出那些运行所占用时间最长的SQL语句.
再找开"查询分析器"然后在查询分析器窗口选择"查询"->选中"显示执行计划"
然后把从跟踪窗口中选出的SQL语句在查询分析器中运行,然后通过分析执行计划的窗口中得出的结果,
找到占用"查询成本"最多的步骤,并记录是在哪个表上占用了最多的时间.
重复这样的步骤,直到运行完所有的SQL语句.这时你就应该能得到一个列表,从而分析出是在哪个表上占用了最多的时间.
接下来,分析程序或者SQL语句中的 WHERE 或 Order By字段,找出出现次数的字段,
再进入到数据库中,查看对应的字段上是否已经建立了索引.
然后建立最合理的索引.
然后再次在"查询分析器"中运行对应的SQL语句,对比上次的"执行计划"看那个步骤战胜的成本是否已经下降.
如果显示的执行计划中没有占用"查询成本"特别高的步骤,那么就说明你的优化很成功.
否则就需要重新设计索引了.
不过注意的是在大型的应用中,各个数据表的关系是很复杂的,所有需要综合考虑其它的情况,否则性能问题"此起彼落"!