Mysql成神之路---B+树索引(超级干货)

1,025 阅读2分钟

Mysql成神之路---B+树索引

B+树执行过程流程图 (类似跳表的原理多级索引)

几个重要的属性

  • record_type:记录头信息的一项属性,表示记录的类型,0表示普通记录、1表示目录项(索引)记录、2表示最小记录、3表示最大记录
  • next_record:记录头信息的一项属性,表示下一条地址相对于本条记录的地址偏移量(因为地址不是连续的,需要索引找到下一个数据的位置)
  • 各个列的值:实际用户数据

索引的代价

一定要合理的应用索引。

  • 空间代价(大量的索引会使用很多内存空间)
  • 时间代价(大量的索引需要维护,会影响写操作的性能)

索引的适用条件

(每一个key都是有序的)

  • 全值匹配
  • 匹配左边的列
  • 匹配范围值(范围条件尽量放在最后,范围条件后面的条件会失效)
  • 精确匹配某一列并范围匹配另外一列
  • 用于排序(尽量与索引保持一致)
  • 用于分组(尽量与索引保持一致)

索引需要注意的问题

  • 只为用于搜索、排序或分组的列创建索引
  • 为列的基数大的列创建索引
  • 索引列的类型尽量小
  • 可以只对字符串值的前缀建立索引
  • 只有索引列在比较表达式中单独出现才可以适用索引
  • 为了尽可能少的让聚簇索引发生页面分裂和记录移位的情况,建议让主键拥有AUTO_INCREMENT属性。
  • 定位并删除表中的重复和冗余索引
  • 尽量使用覆盖索引进行查询,避免回表带来的性能损耗。