Mysql大数据量分页优化过程

 更新时间:2026年03月19日 14:41:48   作者:保护我方胖虎  
这篇文章主要介绍了Mysql大数据量分页优化过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

MySQL分页 (limit offset ,N)并不是跳过 offset 行,而是取 offset+N 行,然后返回放弃前 offset 行,返回 N 行,那当offset特别大的时候,效率就非常的低下。

比如 limit 9999990,10 则mysql 一共会查询 9999990+10条数据(一千万条)然后抛弃掉前边的9999990条数据,返回最后10条

优化思路:

  • 控制返回的总页数
  • 对超过特定阈值的页数进行 SQL改写。

未优化时普通sql

SELECT count(id) FROM `alarm_base` 

SELECT * FROM alarm_base limit 9000000,25

优化方式一、索引覆盖+子查询优化

SELECT * FROM alarm_base WHERE id >=(SELECT id FROM alarm_base limit 9000000,1)

ORDER BY id limit 25

可能有小伙伴有疑问了,你子查询不也得查900_0000+1条数据吗?

确实是这样,但查的仅仅只是900_0000+1条数据的Id,且Id还是主键

优化方式二、起始位置重定义

# 前提 1:(默认ID自增生成、升序排列)
# id> (pageIndex-1)*pageSize

# 前提二 2:(记住上次查找结果的主键位置,但只能一页一页分,跳页会有问题)
# 两个前提满足其一即可使用
# sql
SELECT * FROM alarm_base WHERE id>=2300316 limit 25

优化方式三、利用延迟关联或者子查询

正例:先快速定位需要获取的 id 段,然后再关联:
 SELECT t1.* FROM 表 as t1, (select id from 表 where 条件 LIMIT 100000,20 ) as t2 where t1.id=t2.id

改写前:

改写后:

优化方式四、降级策略

​配置limit的偏移量和获取数一个最大值,超过这个最大值,就返回空数据(超过这个值你已经不是在分页了,而是在刷数据了,如果确认要找数据,应该输入合适条件来缩小范围,而不是一页一页分页。)

​这种降级逻辑在ES中也有体现,当深分页数据大于10000时会报错。。。

​总结

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

相关文章

  • Sql查询MySql数据库中的表名和描述表中字段(列)信息

    Sql查询MySql数据库中的表名和描述表中字段(列)信息

    这篇文章主要介绍了Sql查询获取MySql数据库中的表名和描述表中列名数据类型,长度,精度,是否可以为null,默认值,是否自增,是否是主键,列描述等列信息
    2017-12-12
  • 关于MySQL B+树索引与哈希索引详解

    关于MySQL B+树索引与哈希索引详解

    索引是一种特殊的数据库结构,被设计用来快速查询数据库表中的特定记录,下面这篇文章主要给大家介绍了关于MySQL B+树索引与哈希索引的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下
    2022-03-03
  • MySQL基于索引的压力测试的实现

    MySQL基于索引的压力测试的实现

    本文主要介绍了MySQL基于索引的压力测试的实现,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-11-11
  • mysql5.7.20 安装配置方法图文教程(win10)

    mysql5.7.20 安装配置方法图文教程(win10)

    这篇文章主要为大家详细介绍了win10下mysql5.7.20 安装配置方法图文教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-09-09
  • MySQL数据同步Elasticsearch的4种方案

    MySQL数据同步Elasticsearch的4种方案

    本文主要介绍了MySQL数据同步Elasticsearch的4种方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-03-03
  • openEuler RPM方式安装MySQL8的实现

    openEuler RPM方式安装MySQL8的实现

    本文主要介绍了openEuler RPM方式安装MySQL8的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-01-01
  • mysql 5.7.17 winx64安装配置教程

    mysql 5.7.17 winx64安装配置教程

    这篇文章主要为大家详细介绍了mysql 5.7.17 winx64安装配置教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-03-03
  • MySQL服务器权限与对象权限详解

    MySQL服务器权限与对象权限详解

    这篇文章主要介绍了MySQL服务器权限与对象权限,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-08-08
  • MySQL 4种导入数据的方法

    MySQL 4种导入数据的方法

    这篇文章主要介绍了MySQL 导入 导出数据的方法,文中讲解非常详细,代码帮助大家更好的理解和学习,感兴趣的朋友可以了解下
    2020-07-07
  • MySQL分区表的具体使用

    MySQL分区表的具体使用

    MySQL分区表通过规则将数据分至不同物理存储,提升管理与查询效率,本文主要介绍了MySQL分区表的具体使用,具有一定的参考价值,感兴趣的可以了解一下
    2025-06-06

最新评论