Mysql成神之路---B+树索引
B+树执行过程流程图 (类似跳表的原理多级索引)
几个重要的属性
- record_type:记录头信息的一项属性,表示记录的类型,0表示普通记录、1表示目录项(索引)记录、2表示最小记录、3表示最大记录
- next_record:记录头信息的一项属性,表示下一条地址相对于本条记录的地址偏移量(因为地址不是连续的,需要索引找到下一个数据的位置)
- 各个列的值:实际用户数据
索引的代价
一定要合理的应用索引。
- 空间代价(大量的索引会使用很多内存空间)
- 时间代价(大量的索引需要维护,会影响写操作的性能)
索引的适用条件
(每一个key都是有序的)
- 全值匹配
- 匹配左边的列
- 匹配范围值(范围条件尽量放在最后,范围条件后面的条件会失效)
- 精确匹配某一列并范围匹配另外一列
- 用于排序(尽量与索引保持一致)
- 用于分组(尽量与索引保持一致)
索引需要注意的问题
- 只为用于搜索、排序或分组的列创建索引
- 为列的基数大的列创建索引
- 索引列的类型尽量小
- 可以只对字符串值的前缀建立索引
- 只有索引列在比较表达式中单独出现才可以适用索引
- 为了尽可能少的让聚簇索引发生页面分裂和记录移位的情况,建议让主键拥有AUTO_INCREMENT属性。
- 定位并删除表中的重复和冗余索引
- 尽量使用覆盖索引进行查询,避免回表带来的性能损耗。