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安全模式下创建账号的操作指南

    MySQL安全模式下创建账号的操作指南

    MySQL 的安全模式通常指在跳过权限验证或限制特定功能的状态下启动数据库,常用于管理员密码遗忘、权限损坏等紧急维护场景,本文给大家介绍了如何在MySQL安全模式下创建账号,需要的朋友可以参考下
    2026-05-05
  • mysql大小写敏感导致程序无法启动的问题

    mysql大小写敏感导致程序无法启动的问题

    这篇文章主要介绍了mysql大小写敏感导致程序无法启动的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-11-11
  • MySQL 4.0 升级到mysql 5.0的方法

    MySQL 4.0 升级到mysql 5.0的方法

    需要从4.0直接升级到5.0,查看了一下changelog,发现主要有以下变化,需要升级mysql的朋友可以参考下。
    2011-02-02
  • MySQL安装与创建用户操作(新手入门指南)

    MySQL安装与创建用户操作(新手入门指南)

    这篇文章主要为大家介绍了MySQL安装与创建用户的使用讲解是非常适合小白新手的入门学习,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-05-05
  • Mysql 5.7.17安装后登录mysql的教程

    Mysql 5.7.17安装后登录mysql的教程

    这篇文章主要介绍了Mysql 5.7.17安装后登录mysql的教程以及mysql5.7.17的安装方法,需要的朋友参考下吧
    2017-01-01
  • MySQL order by性能优化方法实例

    MySQL order by性能优化方法实例

    这篇文章主要介绍了MySQL order by性能优化方法实例,本文讲解了MySQL中order by的原理和优化order by的三种方法,需要的朋友可以参考下
    2015-05-05
  • MySQL 5.6 解压缩版安装配置方法图文教程(win10)

    MySQL 5.6 解压缩版安装配置方法图文教程(win10)

    这篇文章主要为大家详细介绍了MySQL for Windows 解压缩版安装配置的相关资料,需要的朋友可以参考下
    2016-07-07
  • Mysql区间分组查询的实现方式

    Mysql区间分组查询的实现方式

    这篇文章主要介绍了Mysql区间分组查询的实现方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-10-10
  • 一条sql语句完成MySQL去重留一

    一条sql语句完成MySQL去重留一

    在使用mysql时,有时需要查询出某个字段不重复的记录,虽然mysql提供 有distinct这个关键字来过滤掉多余的重复记录只保留一条,但往往只用它来返回不重复记录的条数,而不是用它来返回不重记录的所有值。
    2017-12-12
  • 浅谈mysql 系统用户最大文件打开数限制

    浅谈mysql 系统用户最大文件打开数限制

    这篇文章主要介绍了mysql 系统用户最大文件打开数限制,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-03-03

最新评论