SqlServer——索引
作用
任何索引的作用都是为了一个目标:尽可能缩减查找数据的范围,从而提升数据查询的效率。就好像字典有目录,在字典中查某一个字就不用翻完整本,速度当然会快很多,数据库也是同理。
分类
按大类分,SQL索引分为聚集索引(簇集)、非聚集索引(非簇集),SQL默认建立的是非聚集索引,一张表可以拥有多个非聚集索引但只能拥有一个聚集索引。
聚集索引(簇集)
聚集索引用到微软的平衡二叉树算法,查找数据时,首先找到大约二分之一的位置,如果要找的数据比找到的值小,就取到前四分之一,否则就取到后四分之三,以此类推。
聚集索引是在物理上按序排列的,比如1后面必然是2。在进行范围查询或分组、排序查询的时候,只要找到一个目标值,后面的都跟着,会极大提升查询效率,所以在进行这些操作的时候建议使用聚集索引。又因为按序排列不可能有更多排序方法,所以一张表只能有一个聚集索引。
非聚集索引(非簇集)
非聚集索引是Sql默认的索引类型,它不像聚集索引那样按照物理排序查找数据,而是像字典中按偏旁部首查字一样。比如说我们要查询 氵字旁的字,江在第十页,河在第二十页,这样就快速定位了范围,避免了全表查询,同样可以提升查询速率。因为它不是基于物理排序,所以一张表可以拥有多个非聚集索引。
区别
聚集和非聚集的最大区别就是:索引的排列顺序和表记录排列顺序是否一致,如果不一致,就是非聚集了。
简单来说,聚集是物理上连续存在,非聚集是逻辑上连续存在。