mysql聚集索引的理解
InnoDB使用聚集索引存储数据,到底什么是聚集索引,聚集索引直接定义了表中数据的真实的物理存储顺序。聚集索引就像一个电话簿,按照姓氏排序, 并且电话号码紧跟着后面。一个表有且只有一个聚集索引,默认主键作为聚集索引,没有主键则以第一个唯一非空键作为聚集索引,如果也没有则InnoDB 会生成一个隐藏id作为聚集索引。
注:聚集索引中的每个叶子节点包含主键值、事务ID、回滚指针(rollback pointer用于事务和MVCC)和余下的列
聚集索引的优缺点
优点:
- 通过主键查询和区间查询非常快,聚集索引能够快速定位区间的开始位置与结束位置。
- 如果某个字段经常用来排序并且该字段就是聚集索引,那么排序时间就是数据查询时间。
缺点:
- 聚集索引被定义的很大,辅助索引也会变得很大,因为辅助索引都存储了聚集索引的key。
- 聚集索引被个更改会涉及聚集索引的重排,聚集索引的更改代价很高。
- 插入可能比较慢,如果数据不是按照主键的顺序插入。
辅助索引
InnoDB不存在辅助索引的更新,辅助索引的更新意味着先删除再添加。
聚集索引与辅助索引的区别
聚集索引既存储了索引,也存储了行值。辅助索引存储的是主键值和索引key,辅助索引一般包含两次查找,一次查找索引自身,一次查找主键(聚集索引) 获取数据行。