所有分类
  • 所有分类
  • 未分类

MySQL-大数据量的分页优化方案

简介

本文介绍如何优化MySQL的大表的分页查询。

问题描述

在分页查询时,分页页数越大,查询速度越慢。

比如:测试起始页不断增加查看SQL的执行时间:

mysql> SELECT * FROM `t_user` LIMIT 10000,10 ;
mysql> SELECT * FROM `t_user` LIMIT 100000,10 ;
mysql> SELECT * FROM `t_user` LIMIT 1000000,10 ;
mysql> SELECT * FROM `t_user` LIMIT 5000000,10 ;

结果:

mysql> SHOW PROFILES;
+----------+-------------+-------------------------------------+
| Query_ID | Duration    | Query                               |
+----------+-------------+-------------------------------------+
|       1 |  0.00861825 | SELECT * FROM `t_user` LIMIT 10000,10   |
|       2 |  0.68741175 | SELECT * FROM `t_user` LIMIT 100000,10  |
|       3 |  5.62566875 | SELECT * FROM `t_user` LIMIT 1000000,10 |
|       4 | 18.33333200 | SELECT * FROM `t_user` LIMIT 5000000,10 |
+----------+-------------+-------------------------------------+

 可以看到,随着起始位置的增加,查询时间也不断增加。

此内容仅限VIP查看,请先
1

评论6

请先

  1. 查询总数有办法优化吗
    smz 2024-09-24 0
    • 一般是加索引、SELECT尽量走覆盖索引。如果此文方案和加索引后还是不够快,一般就要用ES了
      自学精灵 2024-09-24 0
  2. 方案2是不是用一层子查询就可以了 SELECT * FROM `t_user` WHERE id IN (SELECT id FROM `t_user` WHERE name = 'Tony' LIMIT 1000000, 10 )
    Η ζωή 2024-04-01 0
    • MySQL8及之后的版本可以这么写,但是之前的版本不行。我将这一点补充到文中了
      自学精灵 2024-04-01 0
  3. 为啥 select * ,和select id 查询出来的id不一样 select * from t_order_bill limit 1000000,10 / select id from t_order_bill limit 1000000,10
    僤丶調◇◆已购买 2024-03-25 0
    • 可能与排序有关,加个排序试试吧
      自学精灵 2024-03-25 1
显示验证码
没有账号?注册  忘记密码?

社交账号快速登录