mysql怎么查询两页数据_mysql分页查询踩坑报告
我中招了……没想到mysql分页查询,还藏有这种玄机……
分页查询
分页查询大家经常用到,如果各位大侠有幸参与后台管理系统第开发,对此更是轻车熟路。不管你用怎样的分页控件,一般来说,最终会回归到mysql层面,最终通过limit去分页。
举个例子:
1.先创建张表,如下:
名称
类型
说明
id
bigint(20)
主键ID
name
varchar(20)
姓名
age
int(5)
年龄
bill_date
varchar(10)
账单日
# 建表语句
CREATE TABLE `demo_user` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`name` varchar(20) COLLATE utf8_bin NOT NULL DEFAULT '' COMMENT '姓名',
`age` int(5) NOT NULL DEFAULT '0' COMMENT '年龄',
`bill_date` varchar(15) COLLATE utf8_bin NOT NULL DEFAULT '' COMMENT '账单日',
PRIMARY KEY (`id`),
KEY `idx_bill_date` (`bill_date`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
2.造些数据:
id
name
age
bill_date
1
张
50
20200103
2
李
20
20200101
3
王
18
20200101
4
刘
38
20200101
5
牛
71
20200101
6
神
13
20200102
7
鬼
5
20200101
8
黄
8
20200102
9
赵
99
20200101
3.分页语句(假设每页8条数据):
# 第1页
select t.* from demo_user t
where t.bill_date like '202001%'
limit 0,8;
# 第2页
select t.* from demo_user t
where t.bill_date like '202001%'
limit 8,8;
4.分页结果
结果却很出乎意料,两次查询都没有id=1 张这条数据,而id=9 赵却出现了两次!
# 第1页
2 李 20 20200101
3 王 18 20200101
4 刘 38 20200101
5 牛 71 20200101
7 鬼 5 20200101
9 赵 99 20200101
6 神 13 20200102
8 黄 8 20200102
# 第2页
9 赵 99 20200101
问题分析
我之前认为mysql默认是按照id排序的,但从第1页但结果来看,并非如此。实际上,如果有索引参与其中,会按索引列排序。
如果sql中有limit,则凑够limit数就结束查询。(例子中凑够8条就结束)
好,就算是按索引列排序,那无非是把id=1 张 50 20200103这条数据排在最后才对,在第2页应该能看到它才合理?
嗯,理论上是这样,but……mysql的查询优化好心办了坏事。
来看看这两页查询的执行计划:
第1页的执行计划
# 第1页
EXPLAIN select t.* from demo_user t
where t.bill_date like '202001%'
limit 0,8;
id
select_type
table
partitions
type
possible_keys
key
key_len
ref
rows
filtered
Extra
1
SIMPLE
t
null
range
idx_bill_date
idx_bill_date
47
null
9
100
Using index condition
第2页的执行计划
# 第2页
EXPLAIN select t.* from demo_user t
where t.bill_date like '202001%'
limit 8,8;
id
select_type
table
partitions
type
possible_keys
key
key_len
ref
rows
filtered
Extra
1
SIMPLE
t
null
ALL
idx_bill_date
null
null
null
9
100
Using where
我们发现,第2页的查询没有用到索引。因此,第2页会默认按id排序,得到了id最大的数据——id=9 赵 99 20200101。
至于第2页为什么不走索引?嗯……俺也不知道
解决方案也很简单,加上order by强制排序就可以了。
结论
还是太年轻啊……
mysql怎么查询两页数据_mysql分页查询踩坑报告相关推荐
- mysql如何更新两条数据_mysql根据查询结果批量更新多条数据(插入或更新)
mysql根据查询结果批量更新多条数据(插入或更新) 1.1 前言 mysql根据查询结果执行批量更新或插入时经常会遇到1093的错误问题.基本上批量插入或新增都会涉及到子查询,mysql是建议不要对 ...
- mysql的分页查询用哪个关键字_MySQL 分页查询
一.语法和公式 1.分页语法 SELECT * FROM table LIMIT [offset,] rows | rows OFFSET offset LIMIT 子句可以被用于强制 SELECT ...
- mysql查找有小数点的数据_MySQL中查询中位数?
导读:计算中位数可能是小学的内容,然而在数据库查询中实现却并不是一件容易的事.我们今天就来看看都有哪些方法可以实现. 注:本文所用MySQL版本无限制,所列题目均来源于LeetCode. LeetCo ...
- mysql一样的查询在我本地很快但是线上很慢_MySQL大数据量分页查询方法及其优化...
MySQL大数据量分页查询方法及其优化 ---方法1: 直接使用数据库提供的SQL语句 ---语句样式: MySQL中,可用如下方法: SELECT * FROM 表名称 LIMIT M,N ---适 ...
- 千万级别数据查询优化_MySQL大数据量分页查询方法及其优化
MySQL大数据量分页查询方法及其优化 ---方法1: 直接使用数据库提供的SQL语句 ---语句样式: MySQL中,可用如下方法: SELECT * FROM 表名称 LIMIT M,N ---适 ...
- MySQL 和 Oracle 大数据量分页查询方法及其优化
MySQL大数据量分页查询方法及其优化 ---方法1: 直接使用数据库提供的SQL语句 ---语句样式: MySQL中,可用如下方法: SELECT * FROM 表名称 LIMIT M,N ---适 ...
- mysql读取第3条记录_sql查询(三)之分页查询
分页查询这个内容基本上是个项目都会用的到的东西,面试也会问到的, 平常项目中老是百度用法,这些写博客来总结一下,省的老是百度. 现在主流的关系型数据的分页实现还是有点差别的,以oracle.mysql ...
- easyui datatable ajax 加载数据,ASP.NET easyUI--datagrid 通过ajax请求ASP.NET后台数据的分页查询...
js前台对datagrid的定义代码,如下 mygrid = $('#mytable').datagrid({ fit: true, //自动大小 height: 'auto', rownumbers ...
- mysql分页查询出租房屋信息_分页查询信息(使用jdbc连接mysql数据库实现分页查询任务)...
分页查询信息 使用jdbc连接mysql数据库实现分页查询任务 通过mysql数据库提供的分页机制,实现商品信息的分页查询功能,将查询到的信息显示到jsp页面上. 本项目时一个简单的运用eclipse ...
- Mysql中一千万条数据怎么快速查询
文章来源: 学习通http://www.bdgxy.com/ 目录 普通分页查询 如何优化 偏移量大 采用id限定方式 优化数据量大问题 普通分页查询 当我们在日常工作中遇到大数据查询的时候,第一反应 ...
最新文章
- git 查看修改的代码行数,新增的文件以及删除的代码行数
- Java程序员转Android开发必读经验
- Boost:双图bimap分配的测试程序
- 春天的旁边_春天@PropertySource
- 隐秘攻击:恶意病毒可使智能手机加速老化
- window系统怎么解压tar.bz2文件
- 实验10. Hadoop环境搭建
- Eric6与pyqt5学习笔记14 【实战5 百度贴吧离线签到工具】
- spring事务和加可重入锁解决库存超卖遇到的问题
- 知识管理,助力员工培训体系构建
- perl data::dumper 模块使用
- 深度学习-吴恩达第一课第二周课程作业
- WIN7 错误代码0x80070005怎么办
- 2022年全球与中国智能白板市场现状及未来发展趋势
- jQuery HTML5文件上传美化插件jQuery.filer
- bom树形结构 表设计_BOM模块常用表结构
- 进程通信概念和进程通信方式
- git推送被拒绝可能的原因
- Kafka 消息传递语义 Exactly Once(精准一次) 相关知识
- 【数字逻辑】学习笔记 第五章 Part3 时序逻辑电路(常用时序逻辑电路及其应用)
热门文章
- 李扬:2018春节港澳游(上篇:行)
- 【路径规划】基于matlab蚁群算法求解机器人栅格地图最短路径规划问题【含Matlab源码 1618期】
- 【TSP】基于matlab GUI改进的遗传算法求解旅行商问题【含Matlab源码 926期】
- 【TWVRP】基于matalb模拟退火算法求解带时间窗的车辆路径规划问题【含Matlab源码 160期】
- 机器学习为什么重要_什么是机器学习? 为什么对您的业务很重要?
- 从头实现linux操作系统_从头开始实现您的第一个人工神经元
- 提高抗打击能力_孩子遇挫折就放弃咋办?菲尔普斯法则:培养抗挫力,试试挫折演习...
- Firefox 将添加画中画功能
- 初探Windows用户态调试机制
- MySQL如何把A表查询出来的某个字段的数据插入到新增的字段的下面