• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • MsSql
  • Mysql
  • oracle
  • MariaDB
  • DB2
  • SQLite
  • PostgreSQL
  • MongoDB
  • Redis
  • Access
  • 数据库其它
  • sybase
  • HBase
您的位置:首页 > 数据库 >Mysql > mysql分页原理和高效率的mysql分页查询语句

mysql分页原理和高效率的mysql分页查询语句

作者: 字体:[增加 减小] 来源:互联网 时间:2017-05-11

通过本文主要向大家介绍了mysql limit 效率,mysql 效率,mysql查询效率,mysql 执行效率,mysql实时写入效率等相关知识,希望本文的分享对您有所帮助

以前我在mysql中分页都是用的 limit 100000,20这样的方式,我相信你也是吧,但是要提高效率,让分页的代码效率更高一些,更快一些,那我们又该怎么做呢?

第一部分:看一下分页的基本原理:

对上面的mysql语句说明:limit 10000,20的意思扫描满足条件的10020行,扔掉前面的10000行,返回最后的20行,问题就在这里,如果是limit 100000,100,需要扫描100100行,在一个高并发的应用里,每次查询需要扫描超过10W行,性能肯定大打折扣。文中还提到limit n性能是没问题的,因为只扫描n行。

第二部分:根据雅虎的几位工程师带来了一篇Efficient Pagination Using MySQL的报告内容扩展:在文中提到一种clue的做法,给翻页提供一些线索,比如还是SELECT * FROM message ORDER BY id DESC,按id降序分页,每页20条,当前是第10页,当前页条目id最大的是1020,最小的是1000,如果我们只提供上一页、下一页这样的跳转(不提供到第N页的跳转),那么在处理上一页的时候SQL语句可以是:

处理下一页的时候SQL语句可以是:

不管翻多少页,每次查询只扫描20行。

缺点是只能提供上一页、下一页的链接形式,但是我们的产品经理非常喜欢“上一页 1 2 3 4 5 6 7 8 9 下一页”这样的链接方式,怎么办呢?

如果LIMIT m,n不可避免的话,要优化效率,只有尽可能的让m小一下,我们扩展前面的clue做法,还是SELECT * FROM message ORDER BY id DESC,按id降序分页,每页20条,当前是第10页,当前页条目id最大的是2519,最小的是2500;

当是第10页的SQL如下:

原理还是一样,记录住当前页id的最大值和最小值,计算跳转页面和当前页相对偏移,由于页面相近,这个偏移量不会很大,这样的话m值相对较小,大大减少扫描的行数。其实传统的limit m,n,相对的偏移一直是第一页,这样的话越翻到后面,效率越差,而上面给出的方法就没有这样的问题。

注意SQL语句里面的ASC和DESC,如果是ASC取出来的结果,显示的时候记得倒置一下。

已在60W数据总量的表中测试,效果非常明显

</div>
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • MySQL随机查询记录的效率测试分析
  • 提高MySQL中数据装载效率
  • MySQL优化之如何查找SQL效率低的原因
  • mysql分页原理和高效率的mysql分页查询语句

相关文章

  • 2018-12-05Debian 6.02 (squeeze)下编译安装 MySQL 5.5的方法
  • 2017-05-11MySQL5.1主从同步出现Relay log read failure错误解决方法
  • 2018-12-05SQLServer中字符串左对齐或右对齐显示的sql语句
  • 2018-12-05详解MySQL的主从复制、读写分离、备份恢复
  • 2018-12-05mysql连接过多和死掉以及拒绝服务的解决方法
  • 2018-12-05MySQL授权命令grant的使用方法详解
  • 2018-12-05教你如何在阿里云与腾讯云轻松搭建传统主从复制环境教程
  • 2018-12-05MySQL之-具体分析提升Replication性能的两种架构方式
  • 2018-12-05Oracle数据库安全策略
  • 2017-05-11mysql中迅速插入百万条测试数据的方法

文章分类

  • MsSql
  • Mysql
  • oracle
  • MariaDB
  • DB2
  • SQLite
  • PostgreSQL
  • MongoDB
  • Redis
  • Access
  • 数据库其它
  • sybase
  • HBase

最近更新的内容

    • sqlserver 索引的一些总结
    • ubuntu下设置mysql自动备份的例子
    • 在Oracle中利用SQL_TRACE跟踪SQL的执行
    • select 语句
    • 恢复.mdf 数据库步骤
    • 自增字段 auto_commit的研究分析
    • MySQL OOM 系列三 摆脱MySQL被Kill的厄运_MySQL
    • 关于MYSQL的优化全面详解
    • MySQL从命令行导入SQL脚本时出现中文乱码的解决方法_MySQL
    • SQL Server 自动增长清零的方法

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有