聚簇索引即建立在聚簇上的索引,创建聚簇索引时,需要对已有表数据重新进行排序(若表中已有数据),即删除原始的表数据后再将排序结果按物理顺序插回,
故聚簇索引建立完毕后,建立聚簇索引的列中的数据已经全部按序排列。
聚集索引的叶节点就是最终的数据节点,而非聚集索引的叶节仍然是索引节点,但它有一个指向最终数据的指针。
一个表中只能包含一个聚簇索引,但该索引可以包含多个列。 B-树索引中,聚簇索引的叶层就是数据页。 非聚簇索引类似书本索引,索引与数据存放在不同的物理区域,建立非聚簇索引时数据本身不进行排序。一个表中可含多个非聚簇索引。 B-树索引中,非聚簇索引的叶层仍是索引页,其以指针指向数据页实际存储位置。
1. 聚集索引一个表只能有一个,而非聚集索引一个表可以存在多个。
2. 聚集索引存储记录是物理上连续存在,而非聚集索引是逻辑上的连续,物理存储并不连续。
一个学生表student,里面是学生号id,学生姓名,学生所在城市ID,学生成绩(总分)。
聚集索引可以创建在任何一列你想创建的字段上,这是从理论上讲,实际情况并不能随便指定,否则在性能上会是恶梦。
如果想查询学分在60-90之间的学生的学分以及姓名,在学分上创建聚集索引是否是最优的呢?
既然只输出两列,我们可以在学分以及学生姓名上创建联合非聚集索引,此时的索引所存储的内容就是最终输出的数据,这种索引在比以学分为聚集索引做查询性能更好。
聚集索引:表记录中的排列顺序与索引的排列顺序相同,查询速度快,但是插入速度慢。
适用范围:此列包含有限数目的不同值,查询返回区间数据,返回某值相同的大量结果集。
聚集索引:相当于字典的正文,按照字母A到Z,固定排序,如果要查询赵(Zhao),自然的排在字典后面。字典正文本身就是目录,不需要在去查询其他目录。(只查询设置聚集索引的字段,而不是全行查询)。
每个表只有一个聚集索引,因为目录只能按一种方法进行排序。
非聚集索引:相当于偏旁部首,先找到部首,在根据这个字的页码去找到这个字。和内容排序查询的区别是需要两步才能找到所需的字。