什么是索引

  • 索引的目的:帮助MySQL高效的获取数据的数据结构

  • 常见的所以你查询算法:顺序查找、二分查找、二叉排序树查找、哈希散列法、分块查找、平衡多路搜索树B树(B-tree)

  • 索引是在存储引擎层实现的,而不是在服务器层实现的,所以不同存储引擎具有不同的索引类型和实现。

索引的种类

  1. B+Tree 索引

    • MyISAM和InnoDB存储引擎的默认创建的是B+tree索引,Memory存储引擎也可以为B+tree索引(或者Hash索引)
    • InnoDB 的 B+Tree 索引分为主索引和辅助索引。
      主索引的叶子节点 data 域记录着完整的数据记录,这种索引方式被称为聚簇索引。因为无法把数据行存放在两个不同的地方,所以一个表只能有一个聚簇索引

      辅助索引 的叶子节点的 data 域记录着主键的值,因此在使用辅助索引进行查找时,需要先查找到主键值,然后再到主索引中进行查找

  2. 哈希索引

    哈希索引能以 O(1) 时间进行查找,但是失去了有序性:

    无法用于排序与分组;
    只支持精确查找,无法用于部分查找和范围查找。
    InnoDB 存储引擎有一个特殊的功能叫“自适应哈希索引”,当某个索引值被使用的非常频繁时,会在 B+Tree 索引之上再创建一个哈希索引,这样就让 B+Tree 索引具有哈希索引的一些优点,比如快速的哈希查找

  3. 全文索引

    MyISAM 存储引擎支持全文索引,用于查找文本中的关键词,而不是直接比较是否相等。

    查找条件使用 MATCH AGAINST,而不是普通的 WHERE。

    全文索引使用倒排索引实现,它记录着关键词到其所在文档的映射。

    InnoDB 存储引擎在 MySQL 5.6.4 版本中也开始支持全文索引

  4. 空间数据索引

    MyISAM 存储引擎支持空间数据索引(R-Tree),可以用于地理数据存储。空间数据索引会从所有维度来索引数据,可以有效地使用任意维度来进行组合查询。

必须使用 GIS 相关的函数来维护数据。