前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >MySQL索引专项复习

MySQL索引专项复习

作者头像
一只
发布2023-11-03 09:30:39
发布2023-11-03 09:30:39
1880
举报

一、索引分类与数据结构

  • 数据结构分类:B+树,Hash索引,Full-text索引
  • 物理存储分类:聚集索引、非聚集索引
  • 字段特性分类:主键索引(PRIMARY KEY)、唯一索引(UNIQUE)、普通索引(INDEX)、全文索引(FULLTEXT)
  • 字段个数分类:单列索引、联合索引(也叫复合索引、组合索引)

如果一个表没有主键索引依旧会创建B+树 在InnoDB中,会为每一张表创建一个主键索引,如果没有明确的主键索引,会使用一个隐藏(ROW ID)的、自动生成的主键来创建索引。建议每个表都添加主键索引。

HASH索引 在InnoDB中不支持mysql,即使选择了hash索引,但是使用的依旧是B+,InnoDB只支持自适应的HASH索引,手动选择无效。

memory支持hash索引,存在hash冲突,使用链表解决

聚簇索引和非聚簇索引

聚集索引将索引和数据放在一起,非聚集索引分离开存储,所以需要二次查找。

在MySQL中二级索引使用非聚集索引 ,除了主键索引都是二级索引。二级索引叶子节点存储主键id,根据id再次通过主键索引查找,这叫回表

覆盖索引 查询的字段都在索引列中叫覆盖索引。

索引下推 二级索引中的优化手段,在范围查询中减少回表次数,没有索引下推的时候,一个范围查询使用二级索引,第一次查询了一个范围的主键,假设查询到10条数据,那么需要回表十次,如果使用索引下推,那么只需要回表一次,就可以拿到十条数据。

单列索引 索引只有一个字段,即使是中文,构成的B+树也是有序的

联合索引 构成索引的是多个字段。如何保证数据有序?

假设有三个字段 name、age、id 那就按照name、age、id的先后顺序排序,最后这些字段都在B+树的叶子节点上。

最左前缀原则 当我创建n个字段的联合索引时,若想使用索引查询,查询条件必须使用第一个字段,因为联合索引是按照字段顺序排序的,没有第一个字段就是乱序。 创建A B C的联合索引,AB、AC、ABC都是可以走联合索引的,但是BC不可以

切记合理使用单列索引和联合索引,不可盲目添加索引

索引优缺点 优点:提高检索效率;减低排序成本,默认asc。

缺点:创建和维护索引需要时间;占用物理空间;降低表的增删改效率。

二、MySQL优化

Explain可以模拟优化器执行查询语句,帮助我们理解sql是如何运行的。

Explain字段含义

列名

含义

tyep

查询所用的访问类型

possible_kes

可能用到的索引

key

实际用到的索引

ref

使用索引时,与索引等值匹配的列或者常量

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-11-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、索引分类与数据结构
  • 二、MySQL优化
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档