mysql分页查询如何优化_mysql分页查询优化

mysql分页查询如何优化_mysql分页查询优化测试实验1.直接用limitstart,count分页语句,也是我程序中用的方法:select*fromproductlimitstart,count当起始页较小时,查询没有性能问题,我们分别看下从10,100,1000,10000开始分页的执行时间(每页取20条),如下:select*fromproductlimit10,200.016秒sele…

大家好,又见面了,我是你们的朋友全栈君。

测试实验

1.   直接用limit start, count分页语句, 也是我程序中用的方法:

select * from product limit start, count

当起始页较小时,查询没有性能问题,我们分别看下从10, 100, 1000, 10000开始分页的执行时间(每页取20条), 如下:

select * from product limit 10, 20 0.016秒select * from product limit 100, 20 0.016秒select * from product limit 1000, 20 0.047秒select * from product limit 10000, 20 0.094秒

我们已经看出随着起始记录的增加,时间也随着增大, 这说明分页语句limit跟起始页码是有很大关系的,那么我们把起始记录改为40w看下(也就是记录的一般左右)

select * from product limit 400000, 20 3.229秒

再看我们取最后一页记录的时间

select * from product limit 866613, 20 37.44秒

难怪搜索引擎抓取我们页面的时候经常会报超时,像这种分页最大的页码页显然这种时间是无法忍受的。

从中我们也能总结出两件事情:

1)limit语句的查询时间与起始记录的位置成正比

2)mysql的limit语句是很方便,但是对记录很多的表并不适合直接使用。

2.   对limit分页问题的性能优化方法

利用表的覆盖索引来加速分页查询

我们都知道,利用了索引查询的语句中如果只包含了那个索引列(覆盖索引),那么这种情况会查询很快。

因为利用索引查找有优化算法,且数据就在查询索引上面,不用再去找相关的数据地址了,这样节省了很多时间。另外Mysql中也有相关的索引缓存,在并发高的时候利用缓存就效果更好了。

在我们的例子中,我们知道id字段是主键,自然就包含了默认的主键索引。现在让我们看看利用覆盖索引的查询效果如何:

这次我们之间查询最后一页的数据(利用覆盖索引,只包含id列),如下:

select id from product limit 866613, 20 0.2秒

相对于查询了所有列的37.44秒,提升了大概100多倍的速度

那么如果我们也要查询所有列,有两种方法,一种是id>=的形式,另一种就是利用join,看下实际情况:

SELECT * FROM product WHERE ID > =(select id from product limit 866613, 1) limit 20

查询时间为0.2秒,简直是一个质的飞跃啊,哈哈

另一种写法

SELECT * FROM product a JOIN (select id from product limit 866613, 20) b ON a.ID = b.id

查询时间也很短,赞!

其实两者用的都是一个原理,所以效果也差不多,核心思想就是将分页的压力放在id上,而id有唯一索引,可以将分页带来的效率问题降到最低。不过第一种要求id连续递增的,如果你的id使用的是UUID则无法满足,第二种相对来说使用范围更广,推荐使用!

文章转载自:http://www.cnblogs.com/lyroge/p/3837886.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/148746.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 国外php网站_网盘资源搜索神器

    国外php网站_网盘资源搜索神器依赖管理依赖和包管理库Composer/Packagist:一个包和依赖管理器ComposerInstallers:一个多框架Composer库安装器Pickle:一个PHP扩展安装器 其他的依赖管理其他的相关依赖管理Satis:一个静态Composer存储库生成器Composition:一个在运行时检查Composer环境的库Version:语义版本的解析和比较

    2022年9月21日
    2
  • U盘启动制作教程/实例 新手制作启动盘必看! [20081120]「建议收藏」

    U盘启动制作教程/实例 新手制作启动盘必看! [20081120]「建议收藏」总结几点优盘量产前的准备工作和注意事项 http://bbs.mydigit.cn/read.php?tid=79204 ———————————————————————– 附上总版搜集的一些U盘量产工具使用操作说明手册 http://bbs.mydigit.cn/read.php?tid=

    2025年9月12日
    5
  • c语言中位运算符的用法_c语言中位运算符的优先级

    c语言中位运算符的用法_c语言中位运算符的优先级位 运 算一直对位运算头疼,在此总结一下   程序中的所有数在计算机内存中都是以二进制的形式储存的。位运算说穿了,就是直接对整数在内存中的二进制位进行操作。运位算包括位逻辑运算和移位运算,位逻辑运算能够方便地设置或屏蔽内存中某个字节的一位或几位,也可以对两个数按位相加等;移位运算可以对内存中某个二进制数左移或右移几位等。计算机内部是以补码形式存放数值的。C语言提供了六种位运算位运算符含义…

    2022年10月5日
    2
  • jQuery+CSS3文字跑马灯特效

    jQuery+CSS3文字跑马灯特效是一款将跑马灯背景制作为3D立方体效果,文字在上面移动时,就像是文字投影到墙壁上,在转角出会改变运动方向。效果展示 http://hovertree.co

    2021年12月27日
    41
  • Nocas单机启动命令

    Nocas单机启动命令之前在 Linux 中单机启动 Nocas 使用命令 shstartup sh mstandalone 但是在 cmd 窗口使用该命令不行 因为 sh 命令是在 Linux 系统中的文件 而在本机 cmd 窗口运行 Nocas 输入命令 startup cmd mstandalone

    2025年7月2日
    2
  • 如何防止135端口入侵「建议收藏」

    如何防止135端口入侵「建议收藏」
    新学期到了,许多学生都要配机,新电脑的安全防卫做好了吗?能不能拒绝成为黑客的肉鸡?令人遗憾的是,很多新手都不知道或者忽视了对敏感端口的屏蔽。例如135端口,一旦黑客利用135端口进入你的电脑,就能成功地控制你的机子。我们应该如何防范通过135端口入侵呢?下面我们就为大家来揭开谜底。

      小知识:每台互联网中的计算机系统,都会同时打开多个网络端口,端口就像出入房间的门一样。因为房间的门用于方便人们的进出,而端口则为不同的网路服务提供数据交换。正如房间的门可以放进小tou一样

    2025年7月8日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号