MySQL 默认排序是什么

最近在优化分页查询时,有一个问题:查询不一样列,分页出来得数据不同。先看一下这个现象mysql

表结构:web

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;

这里面,有几个列创建了索引sql

看一下查询语句segmentfault

 

 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 分析一下看看url

 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

spa

 

 

 ②3d

code

 

 

 竟然用到的key不同,相似的状况也能够看下blog

MySQL 默认排序真的是按主键来排序的吗

能够看出,mysql在不给定order by条件的时候,获得的数据结果的顺序是跟查询列有关的。

由于在不一样的查询列的时候,可能会使用到不一样的索引条件。

Mysql在使用不一样索引的时候,获得的数据顺序是不同的。

这个可能就跟Mysql的索引创建机制,以及索引的使用有关了。

能够参考这个看看。

SQL 语句的查询结果的的顺序是由哪些因素决定?

为了不这种状况,在之后的项目中,切记要加上order by

相关文章
相关标签/搜索