什么是索引?索引类似于清华字典上的拼音查找页和部首查找页,通过索引我们能够快速的定位到需要查找的汉字。而索引实际上也是一张表,只不过这张表记录了key以及定位记录的字段。
MySQL通过索引能够快速的找到相关的数据,而如果没有索引,MySQL只能通过全表扫描查询数据,这回带来非常大的开销。
那么MySQL如何使用索引呢?
主要包含以下情况:
- 查找符合Where条件的数据。
- 当有多个索引可以选择时,MySQL选择其中索引选择性最高的索引。
- 当表具备复合索引时,MySQL遵循最左匹配原则,使用索引进行数据的检索。
- 当存在join操作从其他表查找数据时,MySQL可以使用声明相同类型和相同大小的字段上的索引进行查找。
- 当使用MIN和MAX操作时,MySQL使用单一的索引去查找MIN或MAX
- 排序或分组时,如果被排序或分组的字段复合最左匹配原则或者是一个可使用的索引时。
- 当查询结果不需要查找原始记录时(索引覆盖)。
MySQL索引结构
大部分MySQL索引,包括主键索引、普通索引、唯一索引以及全文索引使用B+树存储。空间数据使用R树作为索引,MERMORY存储引擎同时支持使用Hash索引。
B+树
- 回表
- 索引覆盖
- 索引下推
- 最左匹配
- MRR
- FIC
- 前缀索引
- 索引的选择性
索引失效
R树
Hash索引
参考连接
- https://dev.mysql.com/doc/refman/8.0/en/mysql-indexes.html
- http://blog.codinglabs.org/articles/theory-of-mysql-index.html