最近在总结SQL Server2005下性能调优方法,一个通用的调优方法。通过找到系统的瓶颈,然后解决瓶颈,提高性能。例如:当我们找到系统的瓶颈在于磁盘I/O上,在不提高硬件配置的前提下,我们应该如果提高性能?通过各种各样的性能分析工具 :Profiler、SQLDiag、Perfmon等等。我们找到了一些影响性能的关键SQL,现在我们暂不考虑程序问题。对于这些SQL我们应该如何改进呢?说起SQL,不得不提索引,这也就是我们今天要讨论的主题。
首先,什么是索引?从BookOnline上search了一下:
索引有什么类型:在了解了上述概念后,如何正确使用索引对于程序的性能有着至关重要的作用。设计良好的索引可以减少磁盘 I/O 操作,并且消耗的系统资源也较少,从而可以提高查询性能。对于包含 SELECT、UPDATE 或 DELETE 语句的各种查询,索引会很有用。
在我们的coding中,得到相同的查询结果SQL的写法可以有多种,最重要的考虑因素之一是WHERE条件,WHERE条件限制了查询要返回的记录数目,查询优化程序会尝试判断已有的索引,分析对查找符合的记录是否有帮助。
查询优化程序要查看WHERE中的条件,以决定这些条件在限制SQLServer访问时是否有用。所以,有效的设置查询参数,决定了是否可以充分的利用索引。
查询参数可以包含一下操作:=、<、>、>=、<=、BETWEEN、部分like。其中,like当这样使用时会用到索引:like '*%',但like'%*'就用不到索引。因为索引的摆放是依据字段值升序或降序排列,like'%*'这种用法,不能利用有序的数据结构,利用二分法查找数据。
不适当的查询参数有:NOT 、!= 、<>、 !>、 !< 、NOT EXISTS、 NOT IN 、NOT LIKE等,还有一些不当的用法,例如:对数据进行计算,负向查询、等号左边使用函数、使用OR。上述语法都不用不上索引,降低程序的效率。
当我们了解了索引的用法后,在我们编写sql时考虑上述用法,充分利用索引,以高程序的性能。还有,在我们coding过程中,写好sql后,最好使用SQL Server自带的查询计划,来分析SQL执行成本、索引的使用情况,尽可能的使用索引来提高效率。
先说这么多,欢迎高手们提出更好的建议,我们一起进步。