MySQL-索引基础

文章概要

本篇文章通过几个问题来了解MySQL中索引相关的概念。平时在学习MySQL时或多或少都听说过索引的概念,但是索引到底是个什么东西,可能还不是非常的清楚。

正文

1. 什么是索引?

索引,在MySQL中也称为键(key),是存储引擎用于快速查找记录的一种数据结构。

2. 索引有哪些类型?

  1. B-Tree索引
    索引对于多个值进行排序的依据是CREATE TABLE语句中定义索引时列的顺序。

  2. 全文索引
    FULLTEXT是一种特殊类型的索引,它查找的是文本中的关键词,而不是直接比较索引中的值

3. B-Tree索引适用于哪些类型的查找?

  1. 全值匹配(或者说精准匹配,查询的列和索引列完全匹配)
  2. 匹配最左前缀(下面的几种都遵循这一原则)
  3. 匹配列前缀
  4. 匹配范围值
  5. 精确匹配某一列而范围匹配另外一列
  6. 只访问索引的查询

4. 什么情况下索引会失效?

  1. 如果不是按照索引的最左列开始查找,则无法使用索引。
    就是说不能跳过索引中字段起始左边几列而直接使用后面的值来进行匹配。
  2. 不能跳过索引中的列。
    和上面不同,这种情况下是使用了左边的几列,但是后面跳过几列后继续使用后面的几列来进行查询,此时存储引擎只能利用从左边开始的几列索引来进行匹配。
  3. 如果查询中有某列的范围查询,则其右边所有列都无法使用索引优化查找。

由此可见,在创建索引列时,索引的顺序至关重要,关系到后面的查询是否能够充分利用索引。

另外在这里打个问号(?),为什么这些情况下会造成某些索引列失效?

5. 使用索引有哪些优点?

  1. 索引大大减少了服务器需要扫描的数据量
  2. 索引可以帮助服务器避免排序和临时表
  3. 索引可以将随机I/O变为顺序I/O

总结

本篇文章通过5个问题来简单了解索引是什么,为什么会有索引,使用索引有哪些优势。对于文章中提到的一些概念,后面会随着学习的深入,逐步涉及,比如学习B-Tree(实际上InnoDB引擎使用的B+树,因为B树将实际的记录存到到节点中,这会占用更多的内存,另外B树是多路平衡查找树,过多平衡树的操作也会带来更多的开销。)

希望你能从本篇文章学习到一些新的东西。

参考

《高性能MySQL(第四版)》

你可能感兴趣的:(MySQL,mysql,数据库)