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

相關文章
相關標籤/搜索