mysqlorder工作原理(详解Mysql order by与limit混用陷阱)
类别:数据库 浏览量:968
时间:2021-10-06 01:30:20 mysqlorder工作原理
详解Mysql order by与limit混用陷阱
在Mysql中我们常常用order by来进行排序,使用limit来进行分页,当需要先排序后分页时我们往往使用类似的写法select * from 表名 order by 排序字段 limt M,N。但是这种写法却隐藏着较深的使用陷阱。在排序字段有数据重复的情况下,会很容易出现排序结果与预期不一致的问题。
如表:
查询第一页跟最后一页时出现:
解决办法:
|
SELECT * FROM purchaseinfo ORDER BY actiontime,id LIMIT 0,2; |
上面的实际执行结果已经证明现实与想像往往是有差距的,实际SQL执行时并不是按照上述方式执行的。这里其实是Mysql会对Limit做优化,具体优化方式见官方文档:https://dev.mysql.com/doc/refman/5.7/en/limit-optimization.html
|
/* Navicat MySQL Data Transfer Source Server : 本地mysql8.0 Source Server Version : 80018 Source Host : localhost:3308 Source Database : baihe Target Server Type : MYSQL Target Server Version : 80018 File Encoding : 65001 Date : 2020-06-09 14:47:37 */ SET FOREIGN_KEY_CHECKS=0; -- ---------------------------- -- Table structure for purchaseinfo -- ---------------------------- DROP TABLE IF EXISTS `purchaseinfo`; CREATE TABLE `purchaseinfo` ( `id` int (11) NOT NULL AUTO_INCREMENT, `userId` int (11) DEFAULT '0' , `inout` varchar (1) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL , `money` int (11) DEFAULT NULL , `actiontime` datetime DEFAULT NULL COMMENT 'jiaoyi' , PRIMARY KEY (`id`), KEY `UserId` (`userId`) ) ENGINE=InnoDB AUTO_INCREMENT=17 DEFAULT CHARSET=utf8mb4 COLLATE =utf8mb4_0900_ai_ci; -- ---------------------------- -- Records of purchaseinfo -- ---------------------------- INSERT INTO `purchaseinfo` VALUES ( '7' , '1' , 'I' , '10000' , '2020-06-09 18:05:41' ); INSERT INTO `purchaseinfo` VALUES ( '8' , '7788' , 'O' , '20000' , '2020-06-09 18:05:15' ); INSERT INTO `purchaseinfo` VALUES ( '9' , '7788' , 'I' , '20000' , '2020-06-09 18:05:15' ); INSERT INTO `purchaseinfo` VALUES ( '10' , '7788' , 'O' , '50000' , '2020-06-09 18:05:15' ); INSERT INTO `purchaseinfo` VALUES ( '11' , '1' , 'O' , '50000' , '2020-06-09 18:05:15' ); INSERT INTO `purchaseinfo` VALUES ( '12' , '1' , 'O' , '50000' , '2020-06-09 18:05:15' ); INSERT INTO `purchaseinfo` VALUES ( '13' , '1' , 'O' , '50000' , '2020-06-09 18:05:15' ); INSERT INTO `purchaseinfo` VALUES ( '14' , '1' , 'O' , '50000' , '2020-06-09 18:05:15' ); INSERT INTO `purchaseinfo` VALUES ( '15' , '1' , 'O' , '50000' , '2020-06-09 18:05:15' ); INSERT INTO `purchaseinfo` VALUES ( '16' , '1' , 'O' , '50000' , '2020-06-09 18:05:15' ); |
到此这篇关于详解Mysql order by与limit混用陷阱的文章就介绍到这了,更多相关Mysql order by与limit混用内容请搜索开心学习网以前的文章或继续浏览下面的相关文章希望大家以后多多支持开心学习网!
原文链接:https://blog.csdn.net/weixin_37939964/article/details/106641773
您可能感兴趣
- mysql数据库死锁原理(MySQL数据库锁机制原理解析)
- mysql insert into 怎么用(MySQL中INSERT的一般用法)
- mysql索引原理及调优(MySQL索引机制程序员必知)
- mysql查询条件的优化(MySQL查询优化之查询慢原因和解决技巧)
- mysql 临时表
- mysql锁机制图解(详解mysql 中的锁结构)
- phpstudy怎么升级mysql(phpStudy中升级MySQL版本到5.7.17的方法步骤)
- 在mysql中如何授权(MySQL 角色role功能介绍)
- mysql不兼容问题(解决mysql 组合AND和OR带来的问题)
- 如何排查mysql存储过程的问题(Mysql修改存储过程相关权限问题)
- mysql为啥使用b+树(MySQL用B+树作为索引结构有什么好处)
- mysql表结构设计分享(MySql开发之自动同步表结构)
- mysql基本查询方法(MySQL 重写查询语句的三种策略)
- navicat连接mysql1045解决方法(Navicat 连接服务器端中的docker数据库的方法)
- mysql索引建立及应用(MYSQL创建索引,这些知识应该了解)
- mysql5.7.20非安装版教程(MySQL5.5 部署的一个问题)
- 对你思念入骨的女人,跟你见面时会有这几种表现,藏都藏不住(对你思念入骨的女人)
- 纳兰性德绝美作,一场重逢,成就最后一首称得上惊艳的《如梦令》(纳兰性德绝美作)
- 如何快速赚钱(如何快速赚钱方法真实有效)
- 这里输入关键词(如何输入关键词)
- 熊猫中国国宝(熊猫国宝酒53酱香)
- 春节会放假几天(春节会放假吗)
热门推荐
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9