5.3.5 聚簇索引:

来源:互联网 发布:1年java水平 编辑:程序博客网 时间:2024/06/05 13:26
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级索引的叶子节点获得对应的主键值,然后根据这个值无聚簇索引中查找到对应的行。

0 0