mysql 去掉默认排序_MySQL 默认排序是什么
表结构:
CREATE TABLE `t_attach` (
`id`int(11) unsigned NOT NULL AUTO_INCREMENT,
`fname` v
最近在优化分页查询时,有一个问题:查询不同列,分页出来得数据不一样。先看一下这个现象 表结构: 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 LIMIT10,10; SELECT id FROM t_attach LIMIT10,10 好奇怪,居然查询到的数据不是一致的。想了好久,应该是mysql排序的方式不一致导致的。 接着执行了一下EXPLAIN 分析一下看看 EXPLAIN SELECT * FROM t_attach LIMIT 10,10; EXPLAIN SELECT id,fname FROM t_attach LIMIT10,10; EXPLAIN SELECT id FROM t_attach LIMIT10,10 ① ② ③ 居然用到的key不一样,类似的情况也可以看下 可以看出,mysql在不给定order by条件的时候,得到的数据结果的顺序是跟查询列有关的。 因为在不同的查询列的时候,可能会使用到不同的索引条件。 Mysql在使用不同索引的时候,得到的数据顺序是不一样的。 这个可能就跟Mysql的索引建立机制MySQL 排序,以及索引的使用有关了。 可以参考这个看看。 为了避免这种情况,在以后的项目中,切记要加上order by (编辑:武汉站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |