一、索引类型有哪些?

  1. NORMAL:普通索引,作用于适合任何适合创建索引的字段上。
  2. UNIQUE:唯一索引,其中主键索引属于特殊的唯一索引,其区别在于主键索引不允许为空,而唯一索引可以有一个空值。
  3. FULLTEXT:全文索引,适合大字段查询的优化,但不建议使用,因为有更好的方案替代,如ES。
  4. SPATIAL:空间索引,通过R树实现用来解决BLOB(二进制大对象)的查询效率,始于MySQL 5.7.4。

二、索引方法

  1. BTREE:一般通过B+树来实现,
  2. HASH:一般只有memory存储引擎才可以使用。

三、在存储引擎中索引如何实现

1、数据存储:除去表结构.frm文件之外,InnoDB在磁盘上只有一个文件,即索引文件和数据文件存储在同一个文件中,而Myisam引擎有两个文件一个存储索引文件,一个存储数据文件

2、Innodb引擎的特点:支持数据的聚集存储、支持数据压缩、支持数据加密、支持MVcc,支持行级别锁。

3、B+树索引在InnoDB中的的实现:

只有一个索引的叶子节点上保存完整的数据行,即聚集索引(索引键值的逻辑顺序和表数据行物理的存储地址一致,则被称为聚集索引,一般主键索引被作为聚集索引,其他索引均为二级(辅助)索引,如果没有创建主键索引,InnoDB会找一个不为空的唯一索引来替代它,如果连唯一索引都没有创建,InnoDB会将隐藏的字段rowid作为聚集索引去存储)

其他的二级索引的叶子节点则存储对应主键的值,第二步才根据主键的值在聚集索引中去找完整的数据。

总结:二级索引既要保存自己关键字的索引,还要保存主键的索引,只能通过主键值去聚集索引里找完整的数据行;所以二级索引的表现较聚集索引相对较慢。

4、联合索引的最左匹配原则:必须从第一个字段开始,不能跳过,因为只有第一个字段才是有序的,只有当地一个字段有序时,第二个字段也才有序。

5、覆盖索引:是使用索引时的情况,而非索引的类型;即select 的字段全部包含在了二级索引的 B+树中,就不用回表,即不用再去根据主键寻找聚集索引里的完整数据。在explain统计信息中的extra列中显示了using index,即为覆盖索引无需进行回表操作。当然最后还是要根据CBO优化器的建议去决定是否可以用到覆盖索引。