1、SQLServer索引调优实践SQSerr索引调优实践索引的重要性数据库性能优化中索引绝对是一个重量级的因素,可以说,索引使用不当,其它优化措施将毫无意义。聚簇索引(luserd Inde)和非聚簇索引(Non- lstered Inde)最通俗的解释是:聚簇索引的顺序就是数据的物理存储顺序,而对非聚簇索引的索引顺序与数据物理排列顺序无关。举例来说,你翻到新华字典的汉字“爬”那一页就是P开头的部分,这就是物理存储顺序(聚簇索引);而不用你到目录,找到汉字“爬”所在的页码,然后根据页码找到这个字(非聚簇索引)。下表给出了何时使用聚簇索引与非聚簇索引: 动作使用聚簇索引使用非聚簇索引列经常被分组排
2、序应应返回某范围内的数据应不应一个或极少不同值不应不应小数目的不同值应不应大数目的不同值不应应频繁更新的列不应应外键列应应主键列应应频繁修改索引列不应应聚簇索引的唯一性正式聚簇索引的顺序就是数据的物理存储顺序,所以一个表最多只能有一个聚簇索引,因为物理存储只能有一个顺序。正因为一个表最多只能有一个聚簇索引,所以它显得更为珍贵,一个表设置什么为聚簇索引对性能很关键。初学者最大的误区:把主键自动设为聚簇索引因为这是QLServr的默认主键行为,你设置了主键,它就把主键设为聚簇索引,而一个表最多只能有一个聚簇索引,所以很多人就把其他索引设置为非聚簇索引。这个是最大的误区。甚至有的主键又是无意义的自动
3、增量字段,那样的话lusteredindx对效率的帮助,完全被浪费了。刚才说到了,聚簇索引性能最好而且具有唯一性,所以非常珍贵,必须慎重设置。一般要根据这个表最常用的QL查询方式来进行选择,某个字段作为聚簇索引,或组合聚簇索引,这个要看实际情况。事实上,建表的时候,先需要设置主键,然后添加我们想要的聚簇索引,最后设置主键,Serv就会自动把主键设置为非聚簇索引(会自动根据情况选择)。如果你已经设置了主键为聚簇索引,必须先删除主键,然后添加我们想要的聚簇索引,最后恢复设置主键即可。记住我们的最终目的就是在相同结果集情况下,尽可能减少逻辑I。我们先从一个实际使用的简单例子开始。一个简单的表:CRE
4、AT TAB b.b( ID in IDENTITY(1,1)OT NULL,Data1 nt NOT NLL DEFAULT ()),Daa2 int NOT L EFAULT (), ta3 O UL DEULT(0), ame1 nvcar(50)NOT NULL DEALT (), ame2 nvarchar(50) NNUL DEFAL (),ame3 nvarha(50) DEFAULT(), TAt datetmeNOTLL DEAUL(etate()来点测试数据(1w条):dece iinset 1 w i , =,Options,重新选择一个字体例如Vendan 即可。(这个
5、是微软的一个u)运行起来以后,SQServerPofilr会监控数据库的活动,所以最好在你需要监控的数据库上多做些操作。等觉得差不多了,点击停止。然后保存tce结果到文件或者l。这里保存到Ta:在菜单“le”-“ave as ”-“Trace table”,例如输入一个masr数据库的新的al名:proferae,保存即可。找到最耗时的SQL:us maserslec * ro profiletrae order by duation desc;找到了性能瓶颈,接下来就可以有针对性的一个个进行调优了。对使用QLSerr Profilr的更多信息可以参考:tt:/ww.codpojec.co/Bdataae/iagsePoblemsSQSrver.spx使用Qeratbse Engie Tuing Advior数据库引擎优化顾问使用上述的SQLServer Priler得到了tace还有一个好处就是可以用到这个优化顾问。用它可以偷点懒,得到SQLSever给您的优化顾问,例如这个表需要加个索引什么的首先打开数据库引擎优化顾问:然后打开刚才prfiler的结果(我们存到了maste数据库的ofileTrae表):点击“stt anyis”,运行完成后查看优化建议(图中最后是建议建立的索引,性能提升72%)这个方法可以偷点懒,得到QServer给您的优化顾问。
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1