sqlserver的复合索引学习

sqlserver的复合索引学习

ID:8923119

大小:33.00 KB

页数:3页

时间:2018-04-12

sqlserver的复合索引学习_第1页
sqlserver的复合索引学习_第2页
sqlserver的复合索引学习_第3页
资源描述:

《sqlserver的复合索引学习》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、SQLServer的复合索引学习概要什么是单一索引,什么又是复合索引呢?何时新建复合索引,复合索引又需要注意些什么呢?一.概念单一索引是指索引列为一列的情况,即新建索引的语句只实施在一列上。用户可以在多个列上建立索引,这种索引叫做复合索引(组合索引)。复合索引的创建方法与创建单一索引的方法完全一样。但复合索引在数据库操作期间所需的开销更小,可以代替多个单一索引。当表的行数远远大于索引键的数目时,使用这种方式可以明显加快表的查询速度。同时有两个概念叫做窄索引和宽索引,窄索引是指索引列为1-2列的索引

2、,如果不特殊说明的话一般是指单一索引。宽索引也就是索引列超过2列的索引。设计索引的一个重要原则就是能用窄索引不用宽索引,因为窄索引往往比组合索引更有效。拥有更多的窄索引,将给优化程序提供更多的选择余地,这通常有助于提高性能。二.使用创建索引createindexidx1ontable1(col1,col2,col3)查询select*fromtable1wherecol1=Aandcol2=Bandcol3=C这时候查询优化器,不在扫描表了,而是直接的从索引中拿数据,因为索引中有这些数据,这叫覆盖

3、式查询,这样的查询速度非常快。三.注意事项1.何时是用复合索引在where条件中字段用索引,如果用多字段就用复合索引。一般在select的字段不要建什么索引(如果是要查询selectcol1,col2,col3frommytable,就不需要上面的索引了)。根据where条件建索引是极其重要的一个原则。注意不要过多用索引,否则对表更新的效率有很大的影响,因为在操作表的时候要化大量时间花在创建索引中.2.对于复合索引,在查询使用时,最好将条件顺序按找索引的顺序,这样效率最高。如:IDX1:creat

4、eindexidx1ontable1(col2,col3,col5)select*fromtable1wherecol2=Aandcol3=Bandcol5=D如果是"select*fromtable1wherecol3=Bandcol2=Aandcol5=D"或者是"select*fromtable1wherecol3=B"将不会使用索引,或者效果不明显3.复合索引会替代单一索引么?很多人认为只要把任何字段加进聚集索引,就能提高查询速度,也有人感到迷惑:如果把复合的聚集索引字段分开查询,那么查询

5、速度会减慢吗?带着这个问题,我们来看一下以下的查询速度(结果集都是25万条数据):(日期列fariqi首先排在复合聚集索引的起始列,用户名neibuyonghu排在后列)IDX1:createindexidx1onTgongwen(fariqi,neibuyonghu)(1)selectgid,fariqi,neibuyonghu,titlefromTgongwenwherefariqi>'2004-5-5'查询速度:2513毫秒(2)selectgid,fariqi,neibuyonghu,ti

6、tlefromTgongwenwherefariqi>'2004-5-5'andneibuyonghu='办公室'查询速度:2516毫秒(3)selectgid,fariqi,neibuyonghu,titlefromTgongwenwhereneibuyonghu='办公室'查询速度:60280毫秒从以上试验中,我们可以看到如果仅用聚集索引的起始列作为查询条件和同时用到复合聚集索引的全部列的查询速度是几乎一样的,甚至比用上全部的复合索引列还要略快(在查询结果集数目一样的情况下);而如果仅用复合聚

7、集索引的非起始列作为查询条件的话,这个索引是不起任何作用的。当然,语句1、2的查询速度一样是因为查询的条目数一样,如果复合索引的所有列都用上,而且查询结果少的话,这样就会形成“索引覆盖”,因而性能可以达到最优。同时,请记住:无论您是否经常使用聚合索引的其他列,但其前导列一定要是使用最频繁的列。[参考:查询优化及分页算法方案http://blog.csdn.net/chiefsailor/archive/2007/05/28/1628339.aspx]4.需要在同一列上同时建单一索引和复合索引么?试

8、验:sysbase5.0表table1字段:col1,col2,col3试验步骤:(1)建立索引idx1oncol1执行select*fromtable1wherecol1=A使用idx1执行select*fromtable1wherecol1=Aandcol2=B也使用idx1(2)删除索引idx1,然后建立idx2on(col1,col2)复合索引执行以上两个查询,也都使用idx2(3)如果两个索引idx1,idx2都存在并不是wherecol1='A'用idx1;wherec

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。