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 默認排序真的是按主鍵來排序的嗎

可以看出,mysql在不給定order by條件的時候,得到的數據結果的順序是跟查詢列有關的。

因為在不同的查詢列的時候,可能會使用到不同的索引條件。

Mysql在使用不同索引的時候,得到的數據順序是不一樣的。

這個可能就跟Mysql的索引建立機制,以及索引的使用有關了。

可以參考這個看看。

SQL 語句的查詢結果的的順序是由哪些因素決定?

為了避免這種情況,在以后的項目中,切記要加上order by

 

推薦一下:

mysql查詢用不用索引疑問

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM