千家信息网

浅谈mysql使用limit分页优化方案的实现

发表于:2025-01-21 作者:千家信息网编辑
千家信息网最后更新 2025年01月21日,Mysql limit分页语句用法与Oracle和MS SqlServer相比,mysql的分页方法简单的让人想哭。--语法:SELECT * FROM table LIMIT [offset,] r
千家信息网最后更新 2025年01月21日浅谈mysql使用limit分页优化方案的实现

Mysql limit分页语句用法

与Oracle和MS SqlServer相比,mysql的分页方法简单的让人想哭。

--语法:

SELECT * FROM table LIMIT [offset,] rows | rows OFFSET offset

--举例:

select * from table limit 5; --返回前5行select * from table limit 0,5; --同上,返回前5行select * from table limit 5,10; --返回6-15行

如何优化limit

当一个查询语句偏移量offset很大的时候,如select * from table limit 10000,10 , 最好不要直接使用limit,而是先获取到offset的id后,再直接使用limit size来获取数据。效果会好很多。

如:

select * From customers Where customer_id >=(select customer_id From customers Order By customer_id limit 10000,1) limit 10;

一、测试实验

mysql分页直接用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秒

像这种分页最大的页码页显然这种时间是无法忍受的。

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

  • limit语句的查询时间与起始记录的位置成正比。
  • mysql的limit语句是很方便,但是对记录很多的表并不适合直接使用。

二、 对limit分页问题的性能优化方法

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

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

因为利用索引查找有优化算法,且数据就在查询索引上面,不用再去找相关的数据地址了,这样节省了很多时间。

另外Mysql中也有相关的索引缓存,在并发高的时候利用缓存就效果更好了。

在我们的例子中,我们知道id字段是主键,自然就包含了默认的主键索引。现在让我们看看利用覆盖索引的查询效果如何:
这次我们之间查询最后一页的数据(利用覆盖索引,只包含id列),如下:

select id from product limit 866613, 20 

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

那么如果我们也要查询所有列,有两种方法,

id>=的形式:

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

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

利用join

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

查询时间也很短,赞!

其实两者用的都是一个原理嘛,所以效果也差不多。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

查询 时间 索引 语句 起始 效果 数据 方法 很大 性能 时候 缓存 问题 页码 最大 差不多 不用 之间 也就是 事情 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 手机打印服务器可以卸载吗 家庭网络安全密钥是什么 宁夏云控制无纸化会议系统服务器 修改数据库锁 扬州魔方互联网科技有限公司 数据库技术在抗疫具体应用 郑州网络安全标志 成都办公系统软件开发价钱是多少 杭州选校帝互联网科技有限公司 服务器点播软件 河南时代网络技术五星服务 圣地服务器文字图片 信息技术课本中网络技术 数据库定义外键的关键词是 模拟城市5服务器 服务器上有什么好用的浏览器 服务器防火墙添加ip白名单 阿里云服务器团购 iOS三国志战略版服务器进不去 软件开发程序员分工 电脑共享文件服务器 优质网络安全在线课程免费 报网络安全专业主要学什么 安卓软件开发的论坛 数据库防火墙 部署 扬州魔方互联网科技有限公司 网络安全工作会议议题有哪些 浪潮服务器怎么修改管理卡 深圳小腻网络技术有限公司 深圳市万方网络技术有限公司
0