MySQL 默认排序是什么
最近在优化分页查询时,有一个问题:查询不同列,分页出来得数据不一样。先看一下这个现象
表结构:
CREATE TABLE `t_attach` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT, `fname` varchar(100) NOT NULL DEFAULT '', `ftype` varchar(50) DEFAULT '', `fkey` text NOT NULL, `authorId` int(10) DEFAULT NULL, `created` int(10) NOT NULL, `hash` varchar(255) DEFAULT NULL, `web_url` varchar(255) DEFAULT NULL, PRIMARY KEY (`id`), KEY `fname` (`fname`) USING BTREE, KEY `created` (`created`) USING BTREE, KEY `web_url` (`web_url`) USING BTREE, KEY `authorId` (`authorId`) USING BTREE ) ENGINE=InnoDB AUTO_INCREMENT=323466 DEFAULT CHARSET=utf8;
这里面,有几个列建立了索引
看一下查询语句
SELECT * FROM t_attach LIMIT 10,10; SELECT id,fname FROM t_attach LIMIT 10,10; SELECT id FROM t_attach LIMIT 10,10
好奇怪,居然查询到的数据不是一致的。想了好久,应该是mysql排序的方式不一致导致的。
接着执行了一下EXPLAIN 分析一下看看
EXPLAIN SELECT * FROM t_attach LIMIT 10,10; EXPLAIN SELECT id,fname FROM t_attach LIMIT 10,10; EXPLAIN SELECT id FROM t_attach LIMIT 10,10
①
②
③
居然用到的key不一样,类似的情况也可以看下
MySQL 默认排序真的是按主键来排序的吗
可以看出,mysql在不给定order by条件的时候,得到的数据结果的顺序是跟查询列有关的。
因为在不同的查询列的时候,可能会使用到不同的索引条件。
Mysql在使用不同索引的时候,得到的数据顺序是不一样的。
这个可能就跟Mysql的索引建立机制,以及索引的使用有关了。
可以参考这个看看。
SQL 语句的查询结果的的顺序是由哪些因素决定?
为了避免这种情况,在以后的项目中,切记要加上order by
推荐一下:
mysql查询用不用索引疑问
标签:
MySQL 默认排序是什么
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)