MySQL覆盖索引与大分页详解

 更新时间:2025年07月05日 08:37:02   作者:言之。  
这篇文章主要介绍了MySQL覆盖索引与大分页,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

在这里插入图片描述

核心知识点

覆盖索引概念

查询使用了索引,且返回的列在该索引中能全部找到。

例如,对于主键索引(聚集索引),能一次性获取整行记录;对于普通索引,若返回列包含在该索引及主键值中,也算覆盖索引,否则可能需要回表查询。

在这里插入图片描述

覆盖索引判断方法

根据查询条件所走的索引类型(聚集索引或二级索引),判断返回列是否都在该索引中。如根据id查询走聚集索引,返回所有列是覆盖索引;根据name查询走二级索引,若返回列只有id和name则是覆盖索引,若包含未在该二级索引中的列(如gender)则不是覆盖索引。

覆盖索引性能优势

一次性查询出所有数据,相比回表查询性能更高,所以在开发中应尽量避免使用“select *”,防止因返回列未创建索引而触发回表查询。

在这里插入图片描述

覆盖索引在MySQL超大分页问题中的应用

在这里插入图片描述

超大分页问题

当表数据量很大时,使用limit进行分页,越往后分页效率越低。如查询“limit 9000000, 10”,MySQL会排序前9000010条记录,但仅取十条,900多万条记录的排序代价高导致性能低。

解决方法

使用覆盖索引加子查询优化。先通过覆盖索引分页查询获取表中按id排序后的分页id集合(操作id效率高,因id是覆盖索引),再通过该id集合到原表做关联查询提升效率。 

在这里插入图片描述

面试回答思路

  • 覆盖索引定义解释:覆盖索引指查询使用索引且返回列都在索引中能找到,如根据id查询走聚集索引可一次获取所有数据。
  • 开发中的注意事项:避免使用“select *”,防止因返回列未建索引触发回表查询影响性能。
  • 超大分页问题阐述:说明表数据量大时用limit分页,越往后效率越低,如“limit 9000000, 10”的查询,MySQL会排序大量记录但仅取少量,导致性能低。
  • 解决方案说明:用覆盖索引加子查询优化,先分页查询按id排序获取id集合,再用id集合关联原表查询提升效率。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • MySQL如何设置动态创建时间(create_time)和修改时间(update_time)

    MySQL如何设置动态创建时间(create_time)和修改时间(update_time)

    本文主要介绍了MySQL如何设置动态创建时间(create_time)和修改时间(update_time),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-05-05
  • Navicat连接mysql报错1251错误的解决方法

    Navicat连接mysql报错1251错误的解决方法

    这篇文章主要为大家详细介绍了Navicat连接mysql报错1251错误的解决方法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-07-07
  • MySQL备份Shell脚本的实现

    MySQL备份Shell脚本的实现

    本文主要介绍了Shell脚本来自动备份MySQL数据库,脚本会备份指定数据库或所有数据库,按日期命名备份文件以防止覆盖,并自动删除N天前的旧备份以节省空间,具有一定的参考价值,感兴趣的可以了解一下
    2025-03-03
  • MySQL数据操作-DML语句的使用

    MySQL数据操作-DML语句的使用

    这篇文章主要介绍了MySQL数据操作-DML语句的使用,帮助大家更好的理解和使用MySQL数据库,感兴趣的朋友可以了解下
    2020-11-11
  • 使用cmd操作MySQL全过程

    使用cmd操作MySQL全过程

    文章是关于如何在Windows系统上安装和配置MySQL数据库的指南,首先介绍了如何设置环境变量以便在命令行中使用MySQL,然后说明了如何使用管理员权限启动MySQL服务和登录数据库,最后提到了如何使用SQL命令操作数据库
    2025-10-10
  • 数据库中间件MyCat的介绍

    数据库中间件MyCat的介绍

    今天小编就为大家分享一篇关于数据库中间件MyCat的介绍,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-01-01
  • MySQL常用的建表、添加字段、修改字段、添加索引SQL语句写法总结

    MySQL常用的建表、添加字段、修改字段、添加索引SQL语句写法总结

    这篇文章主要介绍了MySQL常用的建表、添加字段、修改字段、添加索引SQL语句写法,总结分析了MySQL建表、编码设置、字段添加、索引操作所涉及的SQL语句,需要的朋友可以参考下
    2017-05-05
  • 验证Mysql中联合索引的最左匹配原则详情

    验证Mysql中联合索引的最左匹配原则详情

    这篇文章主要介绍了验证Mysql中联合索引的最左匹配原则详情,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-08-08
  • Mysql数据库连接失败SSLException: Unsupported record version Unknown-0.0问题

    Mysql数据库连接失败SSLException: Unsupported record 

    这篇文章主要介绍了Mysql数据库连接失败SSLException: Unsupported record version Unknown-0.0问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-06-06
  • 浅谈MySql的存储引擎(表类型)

    浅谈MySql的存储引擎(表类型)

    通常意义上,数据库也就是数据的集合,具体到计算机上数据库可以是存储器上一些文件的集合或者一些内存数据的集合
    2011-05-05

最新评论