MySQL索引详解(一文搞懂)

103 阅读2分钟

索引的分类

  • 数据结构维度

    • B+树索引(常用)
    • 哈希索引
    • 全文索引
    • B-树索引
  • 物理存储维度

    • 聚集索引
    • 非聚集索引
  • 逻辑结构

    • 主键索引
    • 普通索引
    • 联合索引
    • 唯一索引
    • 空间索引

mysql索引类型及性能

普通索引、唯一索引、主键索引、全文索引

提高查询效率,降低插入删除更新表的速度

索引的设计原则

  1. 出现在where或连接子句中的
  2. 基数小的表,索引效果差。每个值都不一致时,创建索引,查询效率越高。
  3. 索引不是越多越好
  4. 定义有外键的数据列一定要创建索引
  5. 频繁更新的字段不要有索引
  6. 大文本大对象不要创建索引

索引失效的情况

1.有or必全有索引;

2.复合索引未用左列字段;(未遵循最左前缀原则)

3.like以%开头;

4.需要类型转换;

5.where中索引列有运算;

6.where中索引列使用了函数;

7.如果mysql觉得全表扫描更快时(数据少);

主键索引与普通索引的区别。数据存储有什么区别

其中R代表一整行的值。

从图中不难看出,主键索引和非主键索引的区别是:非主键索引的叶子节点存放的是主键的值,而主键索引的叶子节点存放的是整行数据,其中非主键索引也被称为二级索引,而主键索引也被称为聚簇索引。

根据这两种结构我们来进行下查询,看看他们在查询上有什么区别。

1、如果查询语句是 select * from table where ID = 100,即主键查询的方式,则只需要搜索 ID 这棵 B+树。

2、如果查询语句是 select * from table where k = 1,即非主键的查询方式,则先搜索k索引树,得到ID=100,再到ID索引树搜索一次,这个过程也被称为回表。

聚簇索引,回表查询

所谓的回表查询,先定位主键值,再定位行记录,它的性能较扫一遍索引树更低。

同上 主键索引和普通索引