程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> Innodb表select查詢順序,innodbselect查詢

Innodb表select查詢順序,innodbselect查詢

編輯:MySQL綜合教程

Innodb表select查詢順序,innodbselect查詢


今天知數堂一個學生反饋說在優化課中老師講Innodb是以主鍵排序存儲,讀取的時間以主鍵為順序讀取,但發現個例外,如下:

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;'

寫入數據:

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); 

執行查詢:

select * from zst_t1;

為什麼這個順序是亂的,不按順序排列呢?難道Innodb表並不是全按主鍵存儲?

使用innodb_ruby這個工具查看一下存儲結構什麼樣

看樣子存儲還是按主鍵排序存儲的。沒毛病。

再來看一下該表的索引:

看到這裡應該明白了怎麼會事了吧,原來這個查詢是走的索引覆蓋,沒有在進行回表讀取原數據。另外,也在此說明,Innodb二索索引包含了主鍵存儲。

來繼續證明一下:

看到using index 吧,表示這個查詢利用索引查詢出來結果,不用讀取原表。

那麼我們給造一個通過主鍵讀取數據操作:

select * from zst_t1 use index(primary);

select * from zst_t1 use index(primary);  #確認一下。

總結:

這個其實就是一個索引包含的查詢案例。 如果靜下來思考一下,也許很快就明白了。也不用這樣去查問題。

技術在於折騰,多搞搞就明白了:)。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved