索引及聚集索引

关键字:单一索引、复合索引、唯一索引、系统自建索引、聚集索引、非聚集索引

一、单一索引

在一个列上创建的索引,称为单一索引。
语法: create index indexname on tabname(col1);

 
二、复合索引

在两个以上的列上创建的索引,称为复合索引。
语法: create index indexname on tabname(col1,col2);

 

 总结:

1、仅用复合索引的起始列作为查询条件和同时用到复合索引的全部列的查询速度是几乎一样的

2、如果仅用复合索引的非起始列作为查询条件的话,这个索引是不起任何作用的

3、无论您是否经常使用复合索引的其他列,但起始列一定要是使用最频繁的列
4、对一张表来说,如果有一个复合索引idx1 on   (col1,col2),就没有必要同时创建一个单一索引 idx2 on col1
5、相对同时建立多字段(包含5、6个字段)的复合索引而言,建立多个窄字段(仅包含一个,或顶多2个字段)的索引可以达到更好的效率和灵活性

 
三、唯一索引

惟一索引可以确保索引列不包含重复的值。
可以用多个列,但是索引可以确保索引列中每个值组合都是唯一的
语法: create unique  index indexname on tabname(col1,col2);

四、系统自建索引

在使用T_SQL语句创建表的时候使用PRIMARY KEY或UNIQUE约束时,会在表上自动创建一个惟一索引。
注意用PRIMARY KEY约束的即是唯一索引,也是聚集索引。

自动创建的索引是无法删除的。

语法:
create table ABC
( empid int primary key,
   fullname varchar(50)UNIQUE

)

 

五、聚集索引

索引中键值的逻辑顺序决定了表中相应行的物理顺序。检索效率比普通索引高,但对数据新增/修改/删除的影响比较大。
特点:
1、无索引,数据无序
2、 有索引,数据与索引同序 
3、 数据会根据索引键的顺序重新排列数据
4、 一个表只能有一个聚集索引

5、不使用在经常修改的列
语法:create CLUSTERED index indexname on tabname(col1);

 

六、非聚集索引

索引不影响表中的数据存储顺序。检索效率比聚集索引低,对数据新增/修改/删除的影响很少。
特点:
1、非聚集索引数据与索引不同序

2、 一个表可以最多可以创建249个非聚集索引
3、 先建聚集索引才能创建非聚集索引
语法:create NONCLUSTERED index indexname on tabname(col1);

 

七、聚簇索引与非聚簇索引的区别

1、区别聚簇索引的叶节点就是数据节点,而非聚簇索引的页节点仍然是索引检点,并保留一个链接指向对应数据块。
2、聚簇索引主键的插入速度要比非聚簇索引主键的插入速度慢很多。
3、相比之下,聚簇索引适合排序,非聚簇索引不适合用在排序的场合。因为聚簇索引本身已经是按照物理顺序放置的,排序很快。非聚簇索引则没有按序存放,需要额外消耗资源来排序。
4、当你需要取出一定范围内的数据时,用聚簇索引也比用非聚簇索引好。

 5、相比非聚簇索引,聚簇索引下的数据在物理上按顺序排在数据页上,重复值也排在一起,因而在那些包含范围检查(between、<、<=、>、>=)或使用group by或orderby的查询时,一旦找到具有范围中第一个键值的行,具有后续索引值的行保证物理上毗连在一起而不必进一步搜索,避免了大范围扫描,可以大大提高查询速度。

猜你喜欢

转载自mixo44.iteye.com/blog/1976836