原文网址:MySQL--大数据量的分页优化方案_IT利刃出鞘的博客-CSDN博客
简介
本文介绍如何优化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 |
+----------+-------------+-------------------------------------+
可以看到,随着起始位置的增加,查询时间也不断增加。
原因分析
查询流程概述
假设查询第1000000页数据,每页10条,则分页查询的语句是:
SELECT * FROM `t_user` WHERE `name` = 'Tony' LIMIT 1000000,10。
本次测试,上述SQL的执行结果为:57.463s。
MySQL对上述的SQL的处理流程为:先排序,然后取出1000010条数据,然后舍去前100000条数据,返回10条数据。
上边只是部分内容,为便于维护,本文已迁移到此地址:MySQL-大数据量的分页优化方案 - 自学精灵