数据库索引浅析

聚集索引和非聚集索引,建议多看看。

针对SQL server,有如下资料:

http://www.cnblogs.com/aspnethot/articles/1504082.html

http://www.cnblogs.com/lwzz/archive/2012/08/05/2620824.html (推荐)

http://blog.csdn.net/baoqiangwang/article/details/5981381 

<<MySQL技术内幕:InnoDB存储引擎(第2版)>>姜承尧



聚集索引:索引的键值逻辑顺序决定了记录的物理顺序:聚集索引确定表中数据的物理顺序。

                 1、 因此一个表只能包含一个聚集索引,但是该索引可以包含多个列。

                  2、聚集索引对于经常搜索的范围查询的字段更有效,因为聚集索引定位开始条件的记录后,可以通过物理检索所有相邻的行,然后很快定位到结束条件,即终止检索。如日期范围。

                  3、当索引值唯一时,使用聚集索引很有效。一般索引值唯一时,可以用聚集索引或者primary key索引。

                 4、当一个表创建了聚集索引时,这个表的物理存储采用B树方式。叶子节点即数据节点。

                 5、B树+IAM保证了聚集索引的搜索可以避免逻辑查找,而使用物理查找的方式,就可以尽量减少磁臂的移动,从而缩短查询时间。

非聚集索引:索引键值的逻辑顺序与磁盘上存储记录的物理顺序不同。

                 1、不需要物理顺序相邻,因此分配时,采用堆的方式存储记录。即后插入的后分配(可能是磁盘的后面位置,也不一定),不管后插入的数据逻辑上应该安排在哪个位置。

                  2、索引是用B树组织的,叶子节点还是索引,是指向具体数据的指针。因此,数据并不一定物理相邻的。

                  3、创建非聚集索引,不影响原来数据的物理顺序。因此可以在包含聚集索引的表上创建非聚集索引。

                 4、可以创建多个非聚集索引,但是只能创建一个聚集索引,因为物理顺序只能有一种。

                 5、当在含聚集索引的表上创建非聚集索引时,对非聚集索引的索引有一定影响:叶子节点的定位符是指向具体数据的聚集键(而非指向具体数据的指针。)

补充:

<<MySQL技术内幕:InnoDB存储引擎(第2版)>>姜承尧著,里面讲到聚集索引相邻并不一定是物理存储相邻。



                   

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章