聚集索引和非聚集索引

时间:2022-05-30 00:39:35
聚簇索引即建立在聚簇上的索引,创建聚簇索引时,需要对已有表数据重新进行排序(若表中已有数据),即删除原始的表数据后再将排序结果按物理顺序插回,
故聚簇索引建立完毕后,建立聚簇索引的列中的数据已经全部按序排列。

聚集索引的叶节点就是最终的数据节点,而非聚集索引的叶节仍然是索引节点,但它有一个指向最终数据的指针。 

  一个表中只能包含一个聚簇索引,但该索引可以包含多个列。
   B-树索引中,聚簇索引的叶层就是数据页。
   非聚簇索引类似书本索引,索引与数据存放在不同的物理区域,建立非聚簇索引时数据本身不进行排序。一个表中可含多个非聚簇索引。
   B-树索引中,非聚簇索引的叶层仍是索引页,其以指针指向数据页实际存储位置。

1. 聚集索引一个表只能有一个,而非聚集索引一个表可以存在多个。

2. 聚集索引存储记录是物理上连续存在,而非聚集索引是逻辑上的连续,物理存储并不连续。

 

 一个学生表student,里面是学生号id,学生姓名,学生所在城市ID,学生成绩(总分)。

 

聚集索引可以创建在任何一列你想创建的字段上,这是从理论上讲,实际情况并不能随便指定,否则在性能上会是恶梦。

如果想查询学分在60-90之间的学生的学分以及姓名,在学分上创建聚集索引是否是最优的呢?

既然只输出两列,我们可以在学分以及学生姓名上创建联合非聚集索引,此时的索引所存储的内容就是最终输出的数据,这种索引在比以学分为聚集索引做查询性能更好。

 

聚集索引:表记录中的排列顺序与索引的排列顺序相同,查询速度快,但是插入速度慢。

适用范围:此列包含有限数目的不同值,查询返回区间数据,返回某值相同的大量结果集。

 

 非聚集索引:

 适用范围:此列包含了大量数目不同的值,查询结果返回的是少量的结果集,order by字句中使用了该列。