mysql 分页 不连续_mysql分页的问题
用过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分页的问题相关推荐
- mysql 分页效率_MYSql分页查询效率提高
CREATE TABLE `goods` ( `UrlId` char(100) CHARACTER SET utf8 NOT NULL, `Title` varchar(100) CHARACTER ...
- c mysql分页存储过程_mysql 分页存储过程调用报错
以前没有写过存储过程,第一次写遇到了这个问题,没弄明白.希望哪位大神能给出的建议!!! sql 语句如下: CREATE DEFINER=`root`@`%` PROCEDURE `pager` ( ...
- java mysql 分页查询_MySQL分页查询方法及优化
当数据库的数据量很大时,一次性查询结果就会变得很慢,为了提高查询效率,我们可以使用MySQL的分页查询功能.本文就为大家带来MySQL分页查询方法及优化. 推荐阅读: 分页查询方法: 在MySQL中, ...
- mysql limit 分页 优化_MYSQL分页limit速度太慢优化方法
在mysql中limit可以实现快速分页,但是如果数据到了几百万时我们的limit必须优化才能有效的合理的实现分页了,否则可能卡死你的服务器哦. 当一个表数据有几百万的数据的时候成了问题! 如 * f ...
- mysql 高效分页存储过程_mysql分页存储过程
CREATE PROCEDURE 'sp_page'( in _pagecurrent int,--/*当前页*/ in _pagesize int,--/*每页的记录数*/ in _ifelse v ...
- mysql原生分页语句_mysql原生分页
select * from table limit (pageNo-1)*pageSize, pageSize; 一:分页需求: 客户端通过传递start(页码),limit(每页显示的条数)两个参数 ...
- mysql分页案例_MySQL优化案例系列-mysql分页优化
通常,我们会采用ORDER BY LIMIT start, offset 的方式来进行分页查询.例如下面这个SQL: SELECT * FROM `t1` WHERE ftype=1 ORDER BY ...
- mysql+分页脚本_MySql实现分页查询的SQL
一:分页需求: 客户端通过传递start(页码),limit(每页显示的条数)两个参数去分页查询数据库表中的数据,那我们知道MySql数据库提供了分页的函数limit m,n,但是该函数的用法和我们的 ...
- mysql的分页查询用哪个关键字_MySQL 分页查询
一.语法和公式 1.分页语法 SELECT * FROM table LIMIT [offset,] rows | rows OFFSET offset LIMIT 子句可以被用于强制 SELECT ...
最新文章
- 《评人工智能如何走向新阶段》后记(再续13)
- Uncaught TypeError: object is not a function
- asp.net连oracle数据库,ASP.NET连接Oracle数据库的步骤详解(转)
- 边框颜色为 tintColor 的 UIButton
- asp.net面试集合
- pytorch是否可以使用CUDA
- 使用Maven+Nexus+Jenkins+Svn+Tomcat+Sonar搭建持续集成环境(一)
- vue项目实战中的笔记
- vibe算法 c++实现
- Kotlin-Android-Extensions:不仅仅是替代findViewById
- 万字长文讲述我是怎样保送清华的 | 寒门学子奋斗史(四)
- 云通信-腾讯云,TLS独立模式公私钥生成
- 腾讯云服务器SSH密匙登录教程
- 仙剑5手游服务器维护,仙剑奇侠传手游维护及内容更新公告
- python画史迪仔_手把手教你如何使用Python来生成马赛克画!
- uniapp微信小程序实现地图导航
- 【陪客户领导吃饭四部曲】
- UWP使用必应每日壁纸(二)
- 关于标准电阻阻值的说明(E6、E12、E24、E48、E96、E192)
- Jquery全选系列操作(锋利的jQuery)
热门文章
- mac iphone照片_如何在iPhone,iPad和Mac上禁用自动播放视频和实时照片
- 【Python零基础入门篇 · 26】:内置模块的使用:sys模块、time模块、pyinstall模块(打包py文件以及更换图标)、hashlib模块(加密)
- 【读书笔记】《算法竞赛进阶指南》读书笔记——0x10基本数据结构
- 刷脸支付收银系统开发定制源码独立部署
- JS 获取当前年份后两位的问题
- Linux ubuntu忘记root密码解决方法
- 公司的电脑为什么卡——因为缺少工程师文化
- CSS复合选择器—2
- 遇到抖音刷访问量的案例
- 用苹果手机拍照,连这三个拍照功能你会吗?