5.3.5 聚簇索引:

5.3.5 聚簇索引:


聚簇索引 并不是一种单独的索引类型,而是一种数据存储方式。具体的细节依赖于其实现方式,

但InnoDB 的聚簇索引实际上在同一个结构中保存了B-Tree索引和数据行。


Oracle 用户可能更熟悉索引组织表(index-organized table)的说话,实际上是一个意思


InnoDB 将通过主键聚集数据

如果没有定义主键,InnoDB 会选择一个唯一的非空索引代替。如果没有这样的索引,InnoDB 会隐式

定义一个主键来作为聚簇索引。


聚集的数据有一些重要的优点:


1.可以把相关数据保存在一起。

2.数据访问更快,聚族索引将索引和数据保存在同一个B-Tree中,因此从聚簇索引中获取数据通常

比非聚簇索引中查找更快


聚簇索引也有一些缺点:

1.聚簇数据最大限度地提高了I/O密集型应用的性能,但如果数据全部都放在内存中,则访问的顺序就没那么重要了,

聚族索引页就没什么优势了。


2.插入速度严重依赖插入顺序,按照主键插入是加载数据到InnoDB表中速度最快的方式。

但如果不是按照主键顺序加载数据,那么在加载完成后最好使用OPTIMIZE TABLE命令重新组织一下表

3.更新聚簇索引列的代价很高,因为会强制InnoDB将每个被更新的行移动到新的位置

4.二级索引(非聚族索引)可能比想象的要更大,因为在二级索引的叶子节点包含了引用行的主键列

5.二级索引访问需要两次索引查找,而不是一次


最后一点可能让人有些疑惑,为什么二级索引需要两次索引查找?

答案在于二级索引中保存了"行指针"的实质。 要记住

二级索引叶子节点保存的不是指向行的物理位置的指针,而是行的主键值

这意味着通过二级索引查找行,存储引擎需要找到2级索引的叶子节点获得对应的主键值,

然后根据这个值无聚簇索引中查找到对应的行。

posted @ 2016-12-12 10:35  czcb  阅读(157)  评论(0编辑  收藏  举报