2023年8月1日发(作者:)
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在不给定order by条件的时候,得到的数据结果的顺序是跟查询列有关的。因为在不同的查询列的时候,可能会使⽤到不同的索引条件。Mysql在使⽤不同索引的时候,得到的数据顺序是不⼀样的。这个可能就跟Mysql的索引建⽴机制,以及索引的使⽤有关了。可以参考这个看看。为了避免这种情况,在以后的项⽬中,切记要加上order by
推荐⼀下:
2023年8月1日发(作者:)
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在不给定order by条件的时候,得到的数据结果的顺序是跟查询列有关的。因为在不同的查询列的时候,可能会使⽤到不同的索引条件。Mysql在使⽤不同索引的时候,得到的数据顺序是不⼀样的。这个可能就跟Mysql的索引建⽴机制,以及索引的使⽤有关了。可以参考这个看看。为了避免这种情况,在以后的项⽬中,切记要加上order by
推荐⼀下:
发布评论