Mysql 默认排序是什么 最近在优化分页查询时,有一个问题:查询不同列,分页出来得数据不一样。先看一下这个现象 表结构: CREATE TABLE `t_attach` ( `id` int(1
最近在优化分页查询时,有一个问题:查询不同列,分页出来得数据不一样。先看一下这个现象
表结构:
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在不给定order by条件的时候,得到的数据结果的顺序是跟查询列有关的。
因为在不同的查询列的时候,可能会使用到不同的索引条件。
Mysql在使用不同索引的时候,得到的数据顺序是不一样的。
这个可能就跟Mysql的索引建立机制,以及索引的使用有关了。
可以参考这个看看。
为了避免这种情况,在以后的项目中,切记要加上order by
--结束END--
本文标题: MySQL 默认排序是什么
本文链接: https://lsjlt.com/news/6552.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
2024-10-23
2024-10-22
2024-10-22
2024-10-22
2024-10-22
2024-10-22
2024-10-22
2024-10-22
2024-10-22
2024-10-22
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0