索引是在存储引擎层实现的,而不是在服务器层实现的,所以不同存储引擎具有不同的索引类型和实现。
    B+ Tree 索引
    是大多数 MySQL 存储引擎的默认索引类型。因为 B+ Tree 的有序性,所以除了用于查找,还可以用于排序和分组。

    InnoDB 的 B+Tree 索引分为主索引和辅助索引:

    1. 主索引的叶子节点 data 域记录着完整的数据记录,这种索引方式被称为聚簇索引。因为无法把数据行存放在两个不同的地方,所以一个表只能有一个聚簇索引。
    2. 辅助索引的叶子节点的 data 域记录着主键的值,因此在使用辅助索引进行查找时,需要先查找到主键值,然后再到主索引中进行查找。

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

    1. 无法用于排序与分组
    2. 只支持精确查找,无法用于部分查找和范围查找。

    全文索引
    空间数据索引
    索引优化

    1. 独立的列:在进行查询时,索引列不能是表达式的一部分,也不能是函数的参数,否则无法使用索引。
    2. 多列索引:在需要使用多个列作为条件进行查询时,使用多列索引比使用多个单列索引性能更好。
    3. 索引列的顺序:让选择性最强的索引列放在前面。
    4. 前缀索引:对于 BLOB、TEXT 和 VARCHAR 类型的列,必须使用前缀索引,只索引开始的部分字符。
    5. 覆盖索引:索引包含所有需要查询的字段的值。