innodb的汇集索引(聚簇索引)

聚簇索引并非一种单独的索引类型,而是一种数据存储方式(不是数据结构,而是存储结构),具体细节依赖于其实现方式,但innodb的聚簇索引其实是在同一个结构中保存了BTree(B-Tree ,B+Tree)索引和数据行。数据库

http://www.javashuo.com/article/p-bnehpfsf-eg.html  这个连接里介绍了BTree索引数据结构

聚簇索引(clustered index)也称为汇集索引,聚类索引,簇集索引,聚簇索引肯定表中数据的物理顺序。性能

汇集索引:相似字典的拼音目录。表中的数据按照汇集索引的规则来存储的。就像新华字典。整本字典是按照A-Z的顺序来排列。这也是一个表只能有一个汇集索引的缘由。由于这个特色,具体索引应该建在那些常常须要order by,group by,按范围取值的列上。由于数据自己就是按照汇集索引的顺序存储的。不该该建在须要频繁修改的列上,由于汇集索引的每次改动都觉得这表中数据的物理数据的一次从新排序。
 .net

汇集索引默认是按照每张表的主键构造一棵B+Tree(平衡查询树),树中的叶子节点存放着表中的行记录数据,所以,也将汇集索引的叶子节点称为数据页;非叶子节点中存放着仅仅是键值和指向叶子节点的偏移量。每一个叶子节点(数据页)都经过一个双向链表进行链接。 
因为实际的数据页只能按照一棵B+树进行排序,所以数据库中每张表只能有一个汇集索引。 
汇集索引能过特别快的访问针对范围值的查询。blog

 

innodb将经过主键汇集数据,若是没有定义主键,Innodb会选择第一个非空的惟一索引代替,若是没有非空惟一索引,Innodb会隐式定义一个6字节的rowid主键来做为汇集索引。innodb只汇集在同一个页面中的记录,包含相邻键值的页面可能会相距甚远。排序

要注意:聚簇主键可能对性能有帮助,但也可能致使严重的性能问题,尤为是将表的存储引擎从innodb转换成其余引擎的时候。索引

相关文章
相关标签/搜索