用过mysql的人肯定知道,mysql提供了原生的分页功能-----LIMIT关键字。LIMIT 子句可以被用于强制 SELECT 语句返回指定的记录数。LIMIT 接受一个或两个数字参数。参数必须是一个整数常量。如果给定两个参数,第一个参数指定第一个返回记录行的偏移量,第二个参数指定返回记录行的最大数目。TIPS:初始记录行的偏移量是 0(而不是 1)。

但是我再实际的项目过程中使用LIMIT子句时,在分页数目很大的情况下(几万页),后面的翻页的速度明显慢于前面,特别好奇这个现象的原因,于是explain了一下,才发现mysql LIMIT 10000, 20的意思扫描满足条件的10020行,扔掉前面的10000行,返回最后的20行。如下所示:

EXPLAIN SELECT * FROM exp_platform ORDER BY id DESC LIMIT 10000,5

***************** 1. row **************

id: 1

select_type: SIMPLE

table: message

type: index

possible_keys: NULL

key: PRIMARY

key_len: 4

ref: NULL

rows: 10020

Extra:

1 row in set (0.00 sec)

这相当于越往后面翻页越相当于全表扫描,这样在一个高并发的应用下,性能肯定是hold不住的。但是LIMIT n这样的语句性能是没有问题的,因为只扫描n行。于是就想找解决办法,如下:

Solution1:使用LIMIT n

"clue法":大概的思路就是在where语句根据id或者别的字段做一些限制。但是这个思路只能提供“上一页”、“下一页”这样的跳转,因为你需要拿到上一页或者下一页的id然后再根据where语句筛选,再使用LIMIT N来做。这样的话,不管翻多少页,每次查询只扫描20行。

SELECT * FROM exp_platform WHERE id >= 9500 LIMIT 5

Solution2:使用子查询

SELECT * FROM exp_platform WHERE id >= (SELECT id FROM exp_platform ORDER BY id LIMIT 10000, 1) LIMIT 20

子查询是在索引上完成的,而普通查询是在数据文件上完成的,通常来说,索引文件要比数据文件小很多,所以操作起来更有效

Solution3:使用JOIN分页方式,这个没有尝试过,有机会可以试试。

实际可以利用类似策略模式的方式去处理分页,比如判断如果是一百页以内,就使用最基本的分页方式,大于一百页,则使用子查询的分页方式。

mysql 分页 不连续_mysql分页的问题相关推荐

  1. mysql 分页效率_MYSql分页查询效率提高

    CREATE TABLE `goods` ( `UrlId` char(100) CHARACTER SET utf8 NOT NULL, `Title` varchar(100) CHARACTER ...

  2. c mysql分页存储过程_mysql 分页存储过程调用报错

    以前没有写过存储过程,第一次写遇到了这个问题,没弄明白.希望哪位大神能给出的建议!!! sql 语句如下: CREATE DEFINER=`root`@`%` PROCEDURE `pager` ( ...

  3. java mysql 分页查询_MySQL分页查询方法及优化

    当数据库的数据量很大时,一次性查询结果就会变得很慢,为了提高查询效率,我们可以使用MySQL的分页查询功能.本文就为大家带来MySQL分页查询方法及优化. 推荐阅读: 分页查询方法: 在MySQL中, ...

  4. mysql limit 分页 优化_MYSQL分页limit速度太慢优化方法

    在mysql中limit可以实现快速分页,但是如果数据到了几百万时我们的limit必须优化才能有效的合理的实现分页了,否则可能卡死你的服务器哦. 当一个表数据有几百万的数据的时候成了问题! 如 * f ...

  5. mysql 高效分页存储过程_mysql分页存储过程

    CREATE PROCEDURE 'sp_page'( in _pagecurrent int,--/*当前页*/ in _pagesize int,--/*每页的记录数*/ in _ifelse v ...

  6. mysql原生分页语句_mysql原生分页

    select * from table limit (pageNo-1)*pageSize, pageSize; 一:分页需求: 客户端通过传递start(页码),limit(每页显示的条数)两个参数 ...

  7. mysql分页案例_MySQL优化案例系列-mysql分页优化

    通常,我们会采用ORDER BY LIMIT start, offset 的方式来进行分页查询.例如下面这个SQL: SELECT * FROM `t1` WHERE ftype=1 ORDER BY ...

  8. mysql+分页脚本_MySql实现分页查询的SQL

    一:分页需求: 客户端通过传递start(页码),limit(每页显示的条数)两个参数去分页查询数据库表中的数据,那我们知道MySql数据库提供了分页的函数limit m,n,但是该函数的用法和我们的 ...

  9. mysql的分页查询用哪个关键字_MySQL 分页查询

    一.语法和公式 1.分页语法 SELECT * FROM table LIMIT [offset,] rows | rows OFFSET offset LIMIT 子句可以被用于强制 SELECT ...

最新文章

  1. 《评人工智能如何走向新阶段》后记(再续13)
  2. Uncaught TypeError: object is not a function
  3. asp.net连oracle数据库,ASP.NET连接Oracle数据库的步骤详解(转)
  4. 边框颜色为 tintColor 的 UIButton
  5. asp.net面试集合
  6. pytorch是否可以使用CUDA
  7. 使用Maven+Nexus+Jenkins+Svn+Tomcat+Sonar搭建持续集成环境(一)
  8. vue项目实战中的笔记
  9. vibe算法 c++实现
  10. Kotlin-Android-Extensions:不仅仅是替代findViewById
  11. 万字长文讲述我是怎样保送清华的 | 寒门学子奋斗史(四)
  12. 云通信-腾讯云,TLS独立模式公私钥生成
  13. 腾讯云服务器SSH密匙登录教程
  14. 仙剑5手游服务器维护,仙剑奇侠传手游维护及内容更新公告
  15. python画史迪仔_手把手教你如何使用Python来生成马赛克画!
  16. uniapp微信小程序实现地图导航
  17. 【陪客户领导吃饭四部曲】
  18. UWP使用必应每日壁纸(二)
  19. 关于标准电阻阻值的说明(E6、E12、E24、E48、E96、E192)
  20. Jquery全选系列操作(锋利的jQuery)

热门文章

  1. mac iphone照片_如何在iPhone,iPad和Mac上禁用自动播放视频和实时照片
  2. 【Python零基础入门篇 · 26】:内置模块的使用:sys模块、time模块、pyinstall模块(打包py文件以及更换图标)、hashlib模块(加密)
  3. 【读书笔记】《算法竞赛进阶指南》读书笔记——0x10基本数据结构
  4. 刷脸支付收银系统开发定制源码独立部署
  5. JS 获取当前年份后两位的问题
  6. Linux ubuntu忘记root密码解决方法
  7. 公司的电脑为什么卡——因为缺少工程师文化
  8. CSS复合选择器—2
  9. 遇到抖音刷访问量的案例
  10. 用苹果手机拍照,连这三个拍照功能你会吗?