主键索引
表的主键使用的就是主键索引,一张表只能有一个主键索引,主键索引不能为null,且不能重复。
主键索引存在于B+树的非叶子节点和叶子节点,叶子节点存放的还有数据。
非主键索引
非主键索引也叫二级索引,包括有唯一索引,普通索引,前缀索引、全文索引。
每新建一个二级索引,就是新建一个索引B+树,非叶子节点存放索引列的值,叶子节点存放索引列的值和主键值。大大提高查询效率,空间换时间。
惊天大秘密——主键索引和非主键索引不存储在一个B+树里面-CSDN博客
唯一索引:一张表可以有多个唯一索引,该索引的列不能重复,但可以为null。
普通索引:只是为了增加查询效率,一张表允许有多个普通索引,可以重复可以为null。
前缀索引:适用于字符串类型的数据,相比普通索引,建立的索引数据更小。
全文索引:适用于检索大文本数据中的关键信息。
聚簇索引和非聚簇索引
聚簇索引:B+树的叶子节点即存放数据又存放索引,InnoDB中的主键索引就是聚簇索引。
查询速度快,因为索引结构和数据放在一起,一次就可以查回数据。
修改代价大,因为索引和数据放在一起,修改时索引就会被修改。
非聚簇索引:B+树的叶子节点只存放索引,InnoDB中的非主键索引就是非聚簇索引。
查询慢,叶子节点存放主键索引,在查到主键索引值之后可能还要回表去表里再查下数据。比聚簇索引多一次I/O操作,所以会查询慢。注意如果只查索引,不用去回表。所以回表不是必须的。
修改快,叶子节点不存放数据,所以修改快。
覆盖索引和联合索引
覆盖索引:如果需要查询的列正好在索引里,就不用回表,这种情况就是覆盖索引。
联合索引:使用表中的多个字段创建一个索引,放在同一个索引B+树中。
联合索引的最左前缀原则:假设联合索引(a、b、c),匹配顺序只有a,ab,abc的时候才可以命中索引,即where a=1 and b=2 and c=3,中的abc顺序。
索引下推
索引下推(Index Condition Pushdown,简称 ICP)-CSDN博客