MySQL索引与性能(2) 聚簇索引 - MySQL教程
聚簇索引是一种数据存储方式,它实际上是在同一个结构中保存了B+树索引和数据行,InnoDB表是按照聚簇索引组织 的(类似于Oracle的索引组织表)。
InnoDB通过主键聚簇数据,如果没有定义主键,会选择一个唯一的非空索引代替,如果没有这样的索引,会隐式定义 个主键作为聚簇索引。 下图形象说明了聚簇索引表(InnoDB)和普通的堆组织表(MyISAM)的区别: 对于普通的堆组织表来说(右图),表数据和索引是分成存储的,主键索引和二级索引存储上没有任何区别。 而对于聚簇索引表来说(左图),表数据是和主键一起存储的,主键索引的叶结点存储行数据,二级索引的叶结点存 储行的主键值。 聚簇索引表最大限度地提高了I/O密集型应用的性能,但它也有以下几个限制: 1)插入速度严重依赖于插入顺序,按照主键的顺序插入是最快的方式,否则将会出现页分裂,严重影响性能。因此 ,对于InnoDB表,我们一般都会定义一个自增的ID列为主键。 2)更新主键的代价很高,因为将会导致被更新的行移动。因此,对于InnoDB表,我们一般定义主键为不可更新。 3)二级索引访问需要两次索引查找,第一次找到主键值,第二次根据主键值找到行数据。 二级索引的叶节点存储的是主键值,而不是行指针,这是为了减少当出现行移动或数据页分裂时二级索引的维护工作 ,但会让二级索引占用更多的空间。 查看本栏目更多精彩内容:http://www.bianceng.cn/database/MySQL/ (编辑:应用网_镇江站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |