千家信息网

MySQL中回表和索引覆盖的示例分析

发表于:2025-01-23 作者:千家信息网编辑
千家信息网最后更新 2025年01月23日,这篇文章主要介绍MySQL中回表和索引覆盖的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!索引类型聚簇索引: 叶子节点存储的是行记录,每个表必须要有至少一个聚簇索引。使
千家信息网最后更新 2025年01月23日MySQL中回表和索引覆盖的示例分析

这篇文章主要介绍MySQL中回表和索引覆盖的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

索引类型

聚簇索引: 叶子节点存储的是行记录,每个表必须要有至少一个聚簇索引。使用聚簇索引查询会很快,因为可以直接定位到行记录
普通索引:二级索引,除聚簇索引外的索引,即非聚簇索引。普通索引叶子节点存储的是主键(聚簇索引)的值。

聚簇索引递推规则:

  • 如果表设置了主键,则主键就是聚簇索引

  • 如果表没有主键,则会默认第一个NOT NULL,且唯一(UNIQUE)的列作为聚簇索引

  • 以上都没有,则会默认创建一个隐藏的row_id作为聚簇索引

索引结构

id 是主键,所以是聚簇索引,其叶子节点存储的是对应行记录的数据

非聚簇索引(Non-ClusteredIndex)

聚簇索引查询

如果查询条件为主键(聚簇索引),则只需扫描一次B+树即可通过聚簇索引定位到要查找的行记录数据。

如:select * from user where id = 1;

非聚簇索引查询

如果查询条件为普通索引(非聚簇索引),需要扫描两次B+树,第一次扫描通过普通索引定位到聚簇索引的值,然后第二次扫描通过聚簇索引的值定位到要查找的行记录数据。

如:select * from user where age = 30;

1. 先通过普通索引 age=30 定位到主键值 id=1
2. 再通过聚集索引 id=1 定位到行记录数据

先通过普通索引的值定位聚簇索引值,再通过聚簇索引的值定位行记录数据,需要扫描两次索引B+树,它的性能较扫一遍索引树更低。

索引覆盖

只需要在一棵索引树上就能获取SQL所需的所有列数据,无需回表,速度更快。

例如:select id,age from user where age = 10;

使用id,age,name查询:

select id,age,name, salary from user where age = 10;
explain分析:age是普通索引,但name列不在索引树上,所以通过age索引在查询到id和age的值后,需要进行回表再查询name的值。此时的Extra列的Using where表示进行了回表查询

Type: all, 表示全表扫描

增加表的联合索引:CREATE INDEX idx_user_name_age_salary ON mydb.user (name, age, salary);

explain分析:此时字段age和name是组合索引idx_age_name,查询的字段id、age、name的值刚刚都在索引树上,只需扫描一次组合索引B+树即可,这就是实现了索引覆盖,此时的Extra字段为Using index表示使用了索引覆盖。

分页查询(非利用索引):

添加索引之后,即可实现利用索引快速查找。

以上是"MySQL中回表和索引覆盖的示例分析"这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注行业资讯频道!

索引 查询 定位 普通 数据 分析 叶子 字段 节点 存储 示例 内容 只需 就是 条件 篇文章 组合 价值 兴趣 小伙 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 哪儿有软件开发培训 上合互联网科技 物理层软件开发工程师视频 如何清空阿里云服务器上的数据 提高公司网络安全系数 数据库分店名字 图片为什么要先上传到服务器 网络安全性能仿真 计算机电子与网络技术 软件开发需要做些什么 人工智能与软件开发哪个好学 根服务器管理权 网络安全公益讲座心得 数据库按条件查询后计算平均值 无锡新型刀片服务器定制 计算机网络技术教程考试试题 防止黑客攻击服务器关键的技术 网络安全狗官网 陕西金融网络安全宣传员大练兵 数据库安全性的不足之处 绝地求生国际服服务器购买平台 上海防水网络技术概念设计 湛江erp软件开发常见问题 服务器的外部工作环境 大学生网络安全应该注意的问题 网络安全教育小报标题 机器视觉软件开发是做什么 指峰网络技术 larval创建数据库 高中网络安全教育第二节
0