首页 > 技术文章 > MySQL索引

lance-lzj 2020-11-24 23:11 原文

查看索引

SHOW index FROM 表名;

构建索引

ALTER TABLE 表名 ADD index 索引名(字段1);

索引是什么?

​ 索引是数据库中一个或多个列的值进行排序的结构,是帮助MySQL高效获取数据的数据结构。可以理解为,索引是一本书的目录,如果想快速查找某个内容,可以根据索引(目录)快速的找到想要找到的内容。而不必要扫描整个数据库。

MySQL索引类型

  • 普通索引
  • 主键索引
  • 唯一索引
  • 组合索引
  • 全文索引

索引的优缺点:

索引的使用方式:对数据进行频繁查询建立索引,如果需要频繁更改数据不建议使用索引

优点:

  • 索引最大的好处就是提高查询速度

缺点:

  • 缺点就是更新数据时效率低,更新数据的同时也要更新索引。
  • 索引需要占据物理空间和数据空间。

B+索引和hash索引

​ 两者的区别:

  • B+索引数据有序,范围查询
  • Hash索引等值查询效率高,对于范围查询、排序及组合索引仍然效率不高。由于HASH的唯一及类似键值对的形式,很适合作为索引。HASH索引可以一次定位,不需要像树形索引那样逐层查找,因此具有极高的效率。但是,这种高效是有条件的,即只在“=”和“in”条件下高效

聚簇索引和非聚集索引

  • 聚集索引:数据按索引顺序存储,中子节点存储真实的物理数据
  • 聚簇索引:将数据存储与索引放到了一块,找到索引也就找到了数据
  • 非聚集索引:存储指向真正数据行的指针
  • 非聚簇索引:将数据存储于索引分开结构,索引结构的叶子节点指向了数据的对应行。

索引的底层实现

三种树的区别:

  • 红黑树:红黑树进行增加或删除的时候,会进行频繁的调整,来保证红黑树的性质,会浪费时间
  • B-树:b-树查询性能不稳定,查询结构高度不致,每个结点保存指向真实数据的指针,相对比与B+数每一层每屋存储的元素更多,显得更高一些。
  • B+数:b+数相比较于另外两种数,显得更矮更宽,查询层次更浅。更方便查询。

哪些情况下需要创建索引?

  • 1、主键自动创建唯一索引

  • 2、频繁作为查询条件的字段应该创建索引

  • 3、查询中与其他表关联的字段,外键关系建立索引

  • 4、where条件里用到的字段需要创建索引

  • 5、最好创建组合索引

  • 6、查询中排序的字段,排序字段若通过索引访问将大大提高排序速度

  • 7、查询中涉及到统计和分组的字段

哪些情况不需要创建索引?

  • 1、表记录过少的时候
  • 2、经常增删改的表
  • 3、包含许多重复内容的列
  • 4、频繁更新的字段不适合创建索引

推荐阅读