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级索引的叶子节点获得对应的主键值, 然后根据这个值无聚簇索引中查找到对应的行。