最近在優化分頁查詢時,有一個問題:查詢不同列,分頁出來得資料不一樣,先看一下這個現象
表結構:
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查詢用不用索引疑問
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/29403.html
標籤:MySQL
上一篇:MySQL資料庫常見的資料型別
