《Mysql學(xué)習(xí)Innodb表select查詢順序》要點:
本文介紹了Mysql學(xué)習(xí)Innodb表select查詢順序,希望對您有用。如果有疑問,可以聯(lián)系我們。
MYSQL實例今天知數(shù)堂一個學(xué)生反饋說在優(yōu)化課中老師講Innodb是以主鍵排序存儲,讀取的時間以主鍵為順序讀取,但發(fā)現(xiàn)個例外,如下:
MYSQL實例
CREATE TABLE zst_t1 (
uid int(10) NOT NULL AUTO_INCREMENT,
id int(11) NOT NULL,
PRIMARY KEY ( uid ),
KEY idx_id ( id )
) ENGINE=InnoDB;'
MYSQL實例寫入數(shù)據(jù):
MYSQL實例
INSERT INTO zst_t1 VALUES (1,1),(12,1),(22,1),(23,1),(33,1),(2,2),(3,2),(10,2),(11,2),(4,4),(13,4),(14,4);
MYSQL實例執(zhí)行查詢:
MYSQL實例select * from zst_t1;
MYSQL實例
MYSQL實例為什么這個順序是亂的,不按順序排列呢?難道Innodb表并不是全按主鍵存儲?
MYSQL實例使用innodb_ruby這個工具查看一下存儲結(jié)構(gòu)什么樣
MYSQL實例
MYSQL實例看樣子存儲還是按主鍵排序存儲的.沒毛病.
MYSQL實例再來看一下該表的索引:
MYSQL實例
MYSQL實例看到這里應(yīng)該明白了怎么會事了吧,原來這個查詢是走的索引覆蓋,沒有在進(jìn)行回表讀取原數(shù)據(jù).另外,也在此說明,Innodb二索索引包含了主鍵存儲.
MYSQL實例來繼續(xù)證明一下:
MYSQL實例
MYSQL實例看到using index 吧,表示這個查詢利用索引查詢出來結(jié)果,不用讀取原表.
MYSQL實例那么我們給造一個通過主鍵讀取數(shù)據(jù)操作:
MYSQL實例select * from zst_t1 use index(primary);
MYSQL實例
MYSQL實例select * from zst_t1 use index(primary);?
#確認(rèn)一下.
MYSQL實例
MYSQL實例總結(jié):
MYSQL實例這個其實就是一個索引包含的查詢案例. 如果靜下來思考一下,也許很快就明白了.也不用這樣去查問題.
MYSQL實例技術(shù)在于折騰,多搞搞就明白了:).
轉(zhuǎn)載請注明本頁網(wǎng)址:
http://www.snjht.com/jiaocheng/1387.html