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 sql语句性能调优简单实例

    mysql sql语句性能调优简单实例

    这篇文章主要介绍了 mysql sql语句性能调优简单实例的相关资料,需要的朋友可以参考下
    2017-06-06
  • MySQL 普通索引和唯一索引的区别详解

    MySQL 普通索引和唯一索引的区别详解

    这篇文章主要介绍了MySQL 普通索引和唯一索引的区别详解,帮助大家更好的理解和学习使用MySQL,感兴趣的朋友可以了解下
    2021-03-03
  • k8s搭建mysql集群实现主从复制的方法步骤

    k8s搭建mysql集群实现主从复制的方法步骤

    本文是基于已有k8s环境下,介绍在k8s环境中部署mysql主从集群的实现步骤,对mysql学习有一定的帮助,感兴趣的可以学习一下
    2023-01-01
  • Mysql 5.6.37 winx64安装双版本mysql笔记记录

    Mysql 5.6.37 winx64安装双版本mysql笔记记录

    机器上现在已经存在5.0版本MySQL的情况下装一个最新版的mysql,下文通过实例代码给大家介绍Mysql 5.6.37 winx64安装双版本mysql笔记记录,感兴趣的朋友一起看看吧
    2017-07-07
  • Mysql清空表数据库命令truncate和delete详解

    Mysql清空表数据库命令truncate和delete详解

    这篇文章主要介绍了Mysql数据库清空表truncate和delete的相关知识,本文给大家讲解的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-06-06
  • MYSQL实现添加购物车时防止重复添加示例代码

    MYSQL实现添加购物车时防止重复添加示例代码

    在向mysql中插入数据的时候最需要注意的就是防止重复发添加数据,下面这篇文章主要给大家介绍了关于MYSQL如何实现添加购物车的时候防止重复添加的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴,下面来一起看看吧。
    2017-09-09
  • MySQL安装时一直卡在starting server的问题及解决方法

    MySQL安装时一直卡在starting server的问题及解决方法

    这篇文章主要介绍了MySQL安装时一直卡在starting server的问题及解决方法,出现这种情况大概有两个原因,文中对每种原因给大家详细介绍,需要的朋友可以参考下
    2022-06-06
  • MySQL数据库索引及底层数据结构详解

    MySQL数据库索引及底层数据结构详解

    MySQL默认使用B+树索引和InnoDB引擎,索引通过有序结构加速数据检索,但增加存储与维护成本,B+树优化了磁盘读写与范围查询效率,成为主流选择,本文介绍MySQL数据库索引及底层数据结构的相关知识,感兴趣的朋友一起看看吧
    2025-08-08
  • MySQL常用命令速查之新手必备的20个高频操作

    MySQL常用命令速查之新手必备的20个高频操作

    MySQL命令是用于与MySQL数据库进行交互和操作的命令,这篇文章主要介绍了MySQL常用命令速查之新手必备的20个高频操作,文中通过代码就介绍的非常详细,需要的朋友可以参考下
    2025-12-12
  • 详解MySQL高可用MMM搭建方案及架构原理

    详解MySQL高可用MMM搭建方案及架构原理

    本篇文章主要介绍搭建MMM方案以及MMM架构的原理。这里不介绍主从、主主的搭建方法,MMM方案不适用对数据一致性要求很高的业务。下面一起来学习学习。
    2016-08-08

最新评论