MySql中深度分页的问题处理

 更新时间:2024年05月07日 11:00:18   作者:天青色等烟雨z  
这篇文章主要介绍了MySql中深度分页的问题处理,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

什么是深度分页?

MySql深度分页的问题,就是比如我们需要所查询出的表数据量较大,需要进行查询结果返回集的后面部分,所出现的性能问题。

比如说我们有一个一百万数据量的表,我们分页需要查询99990,10,数据库通常情况下会先扫描前99990条数据, 再进行分页返回最后10条,这样就会导致查询接口性能变慢,随着OFFSET值的增大,查询性能会显著下降。

这是因为MySQL需要扫描从第一条记录到OFFSET指定的位置,然后返回LIMIT数量的结果,这在大数据集中会导致大量的磁盘I/O操作和较慢的查询响应时间。

解决方案

1. 子查询过滤主键ID

因为Mysql中主键ID数据聚集索引,所有的数据都存储在该节点的叶子节点上,所以如果我们使用了ID过滤条件

MySQL就会跳过前面的索引,也就不会扫描前方的数据,进行一个高效的过滤查询

其实这也就是利用InndeDB中主键索引的优点,但是这有一个前提的咱们的主键ID必须是自增ID

SELECT * FROM table_name
2WHERE id >= (SELECT id FROM table_name ORDER BY some_column LIMIT 100000, 1)
3ORDER BY some_column LIMIT 10;

2. 基于子查询进行优化

SELECT a.* FROM table_name a inner join (
select
 id
from 
table_name
where name="**"
order by id 
limit 10000 10
) b on a.id=b.id

在InndeDB中,子查询中name是索引的情况下是不需要回表的

当基于我们需要范围ID中能快速找出我们所需要对应的数据,深度分页带来的性能问题也能游刃而解

且这种方式是返回的具体的ID集合,不仅快而且数据量也是我们指定

3. 倒序分页

如果数据是按时间戳或其他递增字段排序的,可以考虑倒序查询

即先找出最大的ID,然后逐步往前查,这在某些场景下可以提高效率

总结

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

相关文章

  • MySQL中的聚簇索引、非聚簇索引、联合索引和唯一索引详细介绍

    MySQL中的聚簇索引、非聚簇索引、联合索引和唯一索引详细介绍

    本文主要介绍了MySQL的索引类型,根据索引的存储方式来划分,索引可以分为聚簇索引和非聚簇索引。聚簇索引的特点是叶子节点包含了完整的记录行,而非聚簇索引的叶子节点只有所以字段和主键ID,感兴趣的同学可以阅读本文
    2023-04-04
  • mysql备份的三种方式详解

    mysql备份的三种方式详解

    备份的本质就是将数据集另存一个副本,但是原数据会不停的发生变化,所以利用备份只能回复到数据变化之前的数据。那变化之后的呢?所以制定一个好的备份策略很重要
    2013-09-09
  • mysql慢查询操作实例分析【开启、测试、确认等】

    mysql慢查询操作实例分析【开启、测试、确认等】

    这篇文章主要介绍了mysql慢查询操作,结合实例形式分析了mysql慢查询操作中的开启、测试、确认等实现方法及相关操作技巧,需要的朋友可以参考下
    2019-12-12
  • mysql安装时出现各种常见问题的解决方法

    mysql安装时出现各种常见问题的解决方法

    mysql数据库安装不了了!mysql最后一步安装不上?真头疼!这篇文章主要为大家详细介绍了解决mysql安装时出现各种经典问题的方法,感兴趣的小伙伴们可以参考一下
    2016-08-08
  • mysql 5.0.67最新版替代MySQL 5.0.51b版本官方下载

    mysql 5.0.67最新版替代MySQL 5.0.51b版本官方下载

    发布说明MySQL服务器5.0.67 ( 2008年8月4日) 这是一个bugfix释放现有生产释放的家庭。它取代MySQL的5.0.51b 。
    2008-08-08
  • mysql中的数据目录用法及说明

    mysql中的数据目录用法及说明

    这篇文章主要介绍了mysql中的数据目录用法及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-06-06
  • MySQL Redo Log落盘机制深度解析

    MySQL Redo Log落盘机制深度解析

    本文主要介绍了MySQL Redo Log落盘机制深度解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2026-04-04
  • MySQL备份还原导入导出脚本的方法详解

    MySQL备份还原导入导出脚本的方法详解

    本文介绍了使用mysqldump导出MySQL数据库并导入的方法,包括导出脚本、导入方法、注意事项、最佳实践及自动化脚本示例,强调了数据安全性、完整性及定期备份的重要性,需要的朋友可以参考下
    2026-04-04
  • MySQL存储过程未执行的问题排查过程

    MySQL存储过程未执行的问题排查过程

    文章讲述了对 MySQL 存储过程未执行的问题排查过程,先后排查了数据库版本升级、用户权限不足,最终发现是存储过程创建时的 SQL 模式导致,即使之后去掉该模式,存储过程内部仍沿用旧模式,重新创建存储过程后问题解决,需要的朋友可以参考下
    2025-02-02
  • Windows下MySQL主从复制的配置方法

    Windows下MySQL主从复制的配置方法

    MySQL主从复制允许将来自一个数据库(主数据库)的数据复制到一个或多个数据库(从数据库),主数据库一般是实时的业务数据写入和更新操作,从数据库常用的读取为主
    2020-04-04

最新评论