七.创建高性能索引

一.定义

存储引擎用于快速找到记录的一种数据结构。

优点:

  • 减少数据扫描量
  • 避免排序和临时表
  • 随机I/O变顺序I/O,速度更快

二.结构

每一个叶子结点到根的距离相同。

在某些查询条件下,存储引擎不需要进行全表扫描。而是从索引的根结点开始进行扫描,根结点的槽中存放了指向子节点的指针,存储引擎根据指针向下查找,通过比对节点页的值和要查找的值可以找到合适的指针进入下层叶子结点,这些指针实际上定义了节点值的上限和下限。最终存储引擎要么找到对应的值,要么该记录不存在。

三.使用的查询场景

  • 全值匹配
  • 最左前缀匹配
  • 匹配列前缀
  • 匹配范围值
  • 精准匹配某一列而范围匹配另一列
  • 只访问索引的查询
  • order by顺序查找

四.高性能索引策略

1.前缀索引和索引的选择性

选择性=不重复的索引值/数据表的总记录数,选择性越高说明索引的区分度越高,索引也就越高效。

2.多列索引

节省空间、避免索引相交、索引有联合操作、查询成本被低估

3.设定合适的索引顺序

根据查询条件、选择性、排序、分组和范围等条件创建多列索引

4.创建和利用聚簇索引

索引的叶子结点存放了一条记录的所有数据。(主键值、事务ID、用于事务和MVCC的回滚指针、剩余列)

聚簇索引优先使用主键生成、如果没有主键会使用非空索引、如果还没有的话会隐式定义

聚簇索引在顺序插入时更紧凑、速度更快。

5.创建索引时尽可能满足覆盖查询

一个索引包含所有需要查询的字段的值。

优点:

  • 索引条目远小于数据行的大小
  • 顺序存储,范围查询速度更快
  • 避免对主键的二次查询

6.使用索引扫描来做排序

需要满足索引的排序和order by的顺序一致;有最左前缀间隙列时,间隙列被指定为常量

7.避免冗余和重复索引

你可能感兴趣的:(数据库,读书笔记,java,java,mysql)