MySQL的limit分页,为什么越往后翻越慢,怎么解决?
什么是limit分页问题
select * from table limit 0,10
扫描满足条件的10行,返回10行。
但当执行select * from table limit 800000,20
的时候数据读取就很慢,limit 800000,20
的意思扫描满足条件的800020行,扔掉前面的800000行,返回最后的20行,可想而知这时会很慢,测试了一下达到37.44秒之久。
怎么解决
利用表的覆盖索引来加速分页查询。
我们都知道,利用了索引查询的语句中如果只包含了那个索引列(覆盖索引),那么这种情况会查询很快。
因为利用索引查找有优化算法,且数据就在查询索引上面,不用再回表查询数据行,这样节省了很多时间。
另外Mysql中也有相关的索引缓存,在并发高的时候利用缓存就效果更好了。
在我们的例子中,我们知道id字段是主键,自然就包含了默认的主键索引。
这次我们之间查询(利用覆盖索引,只包含id列),如下:
select id from product order by id limit 800000, 20
查询时间为0.2秒,相对于查询了所有列的37.44秒,提升100多倍的速度。
那么如果我们也要查询所有列,有两种方法:
方法1:子查询,id>=的形式:
select * from product
where ID >= ( select id from product order by id limit 800000,1 ) limit 20
查询时间为0.2秒,简直是一个质的飞跃啊。
方法2:利用join(推荐这种方法
)
select * from product a
JOIN ( select id from product order by id limit 800000,20 ) b on a.id = b.id
效果也差不多查询时间也很短。
子查询和关联查询性能对比
上面两个一个是子查询,一个是关联查询,那么这两种方案的查询性能哪一个更好呢?
子查询:把内层查询结果当作外层查询的比较条件,使用 IN( ) 函数、EXISTS 运算符等,示例如下:
select goods_id,goods_name from goods where goods_id = (select max(goods_id) from goods);
执行子查询时,MYSQL需要创建临时表,查询完毕后再删除这些临时表,所以,子查询的速度会受到一定的影响,这里多了一个创建和销毁临时表的过程。
连接查询(JOIN)连接查询不需要建立临时表,因此其速度比子查询快。另外注意:能过滤先过滤,过滤好了再链接
MySQL的limit分页,为什么越往后翻越慢,怎么解决?相关推荐
- MySQL的limit分页公式和总页数计算
MySQL的limit分页公式和总页数计算 limit分页公式:curPage是当前第几页:pageSize是一页多少条记录 limit (curPage-1)*pageSize,pageSize 实 ...
- mysql分页limit运算,MySQL的limit分页查询及性能问题
MySQL 通过 limit 实现分页查询.limit 接收一个或两个整数型参数.如果是两个参数,第一个指定返回记录行的偏移量,第二个指定返回记录行的最大数目.初始记录行的偏移量是 0.为了与 Pos ...
- MySQL:limit分页公式、总页数公式
1) limit分页公式 (1)limit分页公式:curPage是当前第几页:pageSize是一页多少条记录 limit (curPage-1)*pageSize,pageSize ( ...
- mysql分页到后面_mysql的分页查询,越往后翻越慢怎么办
问题:在业务中,分页查询的场景非常多见,比如脚本分批处理数据:比如页面上需要分页查看列表. 假设是按照自增主键排序后分页,最开始的时候肯定没问题: SELECT * from table_name o ...
- MySQL数据库limit分页、排序
select * from persons limit A, B; 解释: A,查询起点 B,你需要的行数 示例: select * from persons limit 0 , 4; 解释: 起点位 ...
- mysql的limit优化_mysql数据库limit优化例子(百万级数据)
limit优化对于站长来说是经常会要用到了,同样的数据不同做法可以提升不少的性能了,下面我们来看一篇关于mysql数据库limit优化例子,具体如下. 今天看到一篇文章讲的就是mysql数据有100万 ...
- mysql limit 越大越慢_mysql 优化之14:php mysql limit 分页优化,页面值越大查询越慢...
php mysql limit 分页优化,页面越大查询越慢 一.测试前言 当前测试表:nodes_hierarchy目前数据量为20多万 程序分页中我们经常使用的核心sql语句select * fro ...
- mysql大数据量使用limit分页,随着页码的增大,查询效率越低下。
转载地址:http://www.cnblogs.com/lpfuture/p/5772055.html 测试实验 1. 直接用limit start, count分页语句, 也是我程序中用的方法: ...
- MySQL的limit用法和分页查询的性能分析及优化
一.limit用法 在我们使用查询语句的时候,经常要返回前几条或者中间某几行数据,这个时候怎么办呢?不用担心,mysql已经为我们提供了这样一个功能. SELECT * FROM table LIMI ...
最新文章
- 传统Excel绩效考核和绩效管理系统区别
- 院士 人工智能专业理解
- 0.0 目录-深度学习第五课《序列模型》-Stanford吴恩达教授
- python程序员工作时间_Python程序员是怎么找工作的?怎么最快时间找到自己想要的工作?...
- percona toolkit for mysql_Percona Toolkit for MySQL安装(CentOS5.8) | 学步园
- HYDRAstor:可扩展的二级存储
- php采集绕过cloudflare,三行代码带你绕过cloudflare反爬
- java的网络功能与编程_Java的网络功能与编程(转载)
- 学习使用资源文件[6] - 菜单资源
- 基于ExoPlayer的ExoPlayerVideoView
- python爬取方式_selenium+python爬取简书网站的方法
- 计算机考试可以用平板电脑吗,操作计算机等级考试平板电脑可以吗
- 华为eNSP Windows10安装教程及错误讲解
- 放生改变命运居士真实感应实录
- 运行VBS权限受限,需要用Run as Administrator的cmd窗口来运行
- PHP解决某些特殊汉字符或汉字转码后成乱码或者空白的问题
- 【怎样制作ppt】Focusky教程 | 调节音乐的音量(插入的音乐、背景音乐、录音的音量)
- Python | 用Python画个美队盾牌送给你
- 当虚拟筛选遇上高通量筛选
- ADS8328 驱动代码
热门文章
- webservice 天气预报的接口
- FileAlterationMonitor监听目录下文件变化
- 基于android记事本毕业论文,基于Android的记事本应用的设计与实现-毕业论文.doc...
- Android专用Log开源项目——KLog - 泡在网上的日子
- 极限存在准则 两个重要极限——“高等数学”
- 考研二战日记-第六天——高数1.6极限存在准则 两个重要极限
- 2020最新Git使用教程(超详细,很全面)
- gvim 模板(ab命令快速生成常用Verilog模板)
- linux pscp 上传_详解使用pscp命令Linux文件上传与下载
- Vcenter升级兼容性列表