这里写自定义目录标题
1.索引概述
什么是索引?
- 索引(Index)是帮助MySQL高效获取数据的数据结构。
索引优点
- 降低数据库的IO成本
- 加速表和表之间的连接
- 减少查询中分组和排序的时间
- 保证数据唯一性
索引缺点
- 占用盘的存储空间
- 创建和维护的时间成本高
- 增加、删除、更新的速度降低
2. InnoDB中的索引
InnoDB索引方案
针对主键的索引:
索引类型
聚簇索引
特点:
- 页与页之间用双向链表连接;
- 页内的记录之间用单向链表;
- 最下面一层节点是数据页,其他节点是目录页;
- 数据页存储了所有的表数据;
- 目录页存储了主键值和子节点的 目录/数据页 页号;
- 聚簇索引不需要专门使用 INDEX 语句创建,InnoDB会自动创建。
优点:
- 因为数据存储在B+ 树中,数据访问比非聚族索引快;
- 因为本身是排序的,所以 排序查询和范围查询速度很快;
缺点:
- 插入/删除 数据可能导致 数据页,甚至多层的目录页 都需要更新,极大降低性能;
说明:
- 只有InnoDB存储引擎支持聚簇索引,MyISAM不支持;
- 每个表是有一个聚簇索引;
- 如果没有定义主键,InnoDB会用非空唯一的字段做聚簇索引,如果没有非空唯一字段,则隐式的定义一个主键做蹴鞠索引;
- 尽量选择有序地顺序id做主键,可以减少更新是复杂的问题。
非聚簇索引(二级索引 或 辅助索引)
二级索引: 用来给非主键字段建立索引。
二级索引特点:
- 页与页之间用双向链表连接;
- 页内的记录之间用单向链表;
- 叶子节点的页存储的不是完整的表数据,而是 索引字段的值 + 主键字段的值;
- 目录页中不是主键值+页号,而是 索引字段值 + 页号 ;
二级索引的用法:
- 先通过二级索引找到索引字段对应的主键字段的值;
- 再 回表, 到聚簇索引通过找到的主键字段再查找完整的整条记录。
聚族索引与非聚族索引小结
- 聚簇索引的叶子结点存储了完整的数据记录,而非聚簇索引存储的只是主键值;
- 非聚族索引不影响表数据的物理存储位置,所以可以建立多个非聚族索引;