mysql主要有兩大儲存引擎,innodb和myisam
兩大引擎的底層索引實現也有區別。
innodb: 主要是聚集索引和輔助索引
聚集索引,實現是將主鍵id作為索引,以b+樹的結構儲存,葉子節點儲存的是整條id以及其對應的表記錄,id唯一,每次通過id走索引直接查到對應的記錄,效率最高;
輔助索引,以某個字段作為索引,以b+樹結構儲存,葉子節點存的是字段值以及對應的id主鍵,根據字段索引查到id,再根據id主鍵索引查到對應記錄,走了兩邊,效率較低;
myisam:非聚集索引
非聚集索引,將 資料 與 索引 分開儲存,表資料儲存順序與索引順序無關。
主鍵id的索引是以b+樹結構儲存,葉子節點存放的是id和對應的表記錄記憶體位址,通過id索引查到表記錄位址,再找到對應記錄;
效率對比:聚簇索引》非聚簇索引》輔助索引
mysql 覆蓋索引
如果乙個索引包含(或覆蓋)所有需要查詢的字段的值,成為覆蓋索引。即只需掃瞄索引而無須回表。
只掃瞄索引而無需回表的優點:
1.索引條目通常遠小於資料行大小,只需要讀取索引,則mysql會極大地減少資料訪問量。
2.因為索引是按照列值順序儲存的,所以對於io密集的範圍查詢會比隨機從磁碟讀取每一行資料的io少很多。
3.一些儲存引擎如myisam在記憶體中只快取索引,資料則依賴於作業系統來快取,因此要訪問資料需要一次系統呼叫
4.innodb的聚簇索引,覆蓋索引對innodb表特別有用。(innodb的二級索引在葉子節點中儲存了行的主鍵值,所以如果二級主鍵能夠覆蓋查詢,則可以避免對主鍵索引的二次查詢)
關於Mysql的儲存引擎Innodb和Myisam
myisam和innodb 都是採用 b tree這種資料結構來實現 b tree索引。而很大的區別在於,innodb 儲存引擎採用 聚集索引 的資料儲存方式實現b tree索引,所謂 聚集 就是指資料行和相鄰的鍵值緊湊地儲存在一起,注意 innodb 只能聚集乙個葉子頁 16k 的記錄 即聚集索引...
MySql中InnoDB引擎索引
mysql中innodb引擎的索引分兩類,一類是一級索引 主鍵的同義詞 一類是二級索引 非主鍵的索引 兩類索引都使用b tree形式組織,但一級索引的葉子節點包含所以對應的整行資訊,所有的查詢最終都是通過一級索引完成,二級索引只包含二級索引對應的一級索引。所以直接使用一級索引比用二級索引快,因為少了...
mysql搜尋引擎innodb和myisam的區別
上次面試中被問到mysql的搜尋引擎innodb和myisam的區別,一臉懵逼。面試後趕緊查了一下,其主要區別如下 1 儲存檔案 innodb儲存的檔案有.frm格式的表定義檔案和.ibd格式的資料檔案 而myisam儲存的檔案包含.frm格式的表定義檔案 myd的資料檔案 myi的索引檔案。inn...