MySQL提高篇(四)--- 索引详细总结

索引的介绍

  什么是索引?想解释清楚这个问题实际上并不容易,从存储方式上来看,在Innodb存储引擎中,数据信息和索引信息都是存储在一个文件(.ibd文件)上,所以索引可以认为是按照一种特定数据结构(B+树)存储的信息数据。它存在的目的可以总结为一句话:加快数据库查询速度,即让数据库快速定位数据所在的磁盘块。

索引的数据结构分析

  对索引有了解的人都知道,Innodb和MyISAM的索引存储结构是B+树,对于B+树的介绍以及为什么选择B+树这种数据结构,我看到了两篇博客,说的很好,我就不再介绍了。
  Mysql索引底层结构B树和B+树
  为什么Mysql使用B+树这种数据结构?

索引的使用

  这一段主要介绍一下索引的使用方法以及索引常见的失效情况。

创建索引的原则:
  • 频繁作为查询条件的字段创建索引
  • 多表关联查询时on关键字两端的字段都应该创建索引
  • 进行排序、统计、分组的字段应该创建索引
  • 尽量选择创建组合索引而非多个单列索引

为什么选择组合索引?

索引失效的场景:
  • 使用组合索引不满足最左前缀原则,
  • 组合索引中使用了范围查询导致范围查询后面的字段索引失效
  • 在索引字段上使用了函数或类型转换使索引失效
  • 字符串和日期没有加单引号会导致索引失效
  • 使用select * 导致了回表查询,这不会导致索引失效,但是这种方式查询效率比覆盖索引
  • 使用了关键字 or,如果有其连接的字段没有建立索引就会导致其关联的字段上的索引都会失效
  • 以 % 开头的 like 模糊查询,导致索引失效
  • 全表扫描比使用索引更快,则不会使用索引
  • in 会使用索引,而 not in则导致索引失效
  • is NULL、is NOT NULL 有时候会导致索引失效,当字段中的值都不是NULL的时候,使用is NOT NULL就会导致Mysql优化为全表扫描

你可能感兴趣的:(Mysql)