5-数据库索引学习笔记(下)

避免回表过程的方法:

(回表:从索引树找到记录回到主键索引树搜索的过程)

覆盖索引:一个索引包含了所有需查询字段的值。

  • 例:原来的查询语句为select * from T where k between 3 and 5,需先在k索引树找到k=3对应的记录得到对应ID,再去ID索引树查找对应的值(回表)。采用覆盖索引的执行语句为select ID from T where k between 3 and 5,此时只需查ID的值,且ID的值已经在k索引树上,因此可以直接提供查询结果,不需要回表。
  • 优点:减少树的搜索次数,提升查询性能,是常用的性能优化手段。
  • 不是所有类型的索引都可以成为覆盖索引。覆盖索引必须要存储索引列的值,而哈希索引、空间索引和全文索引都不存储索引列的值,所以MySQL只能使用B树索引做覆盖索引。

  • InnoDB的二级索引的叶子节点都包含了主键的值,这意味着InnoDB的二级索引可以有效利用这些额外的主键列来覆盖查询。

最左前缀原则:

  • B+树这种索引结构,可以利用索引的“最左前缀”,来定为记录。

索引下推:(MySQL5.6之后)在索引遍历过程中,对索引中包含的字段先做判断,直接过滤掉不满足条件的记录,减少回表次数。

 

在满足语句需求的情况下,尽量少地访问资源是数据库设计的重要原则之一。在设计表结构时,要以减少资源消耗作为目标。

你可能感兴趣的:(5-数据库索引学习笔记(下))