整體概述
1.innodb的主索引文件上直接存放該行數據,稱為聚簇索引,次索引指向對主鍵的引用
2.myisam中,主索引和次索引,都指向物理行(磁碟位置)
哈哈,說了兩句貌似聽不懂的話。
一。通俗解釋
我們可以這麼理解:
聚簇索引(innodb):索引的葉節點就是資料節點,下邊實打實有資料。
非聚集索引(myisam): 葉節點仍然是索引節點,有指標指向對應的資料區塊。
用圖說明下:
看到了把,不同引擎下的類型是不一樣的。
主要區別是葉子節點下是否有資料塊。
(沒有主鍵他也會建立一個的..innodb都是聚集索引來組織的)
二。優點缺點:
分裂問題:
既然是樹結構,葉子節點可能會有分裂現象
那麼問題來了,
對於非聚簇索引(myisam節點位址,內容較小,有快取在記憶體中,分裂快。
對於聚簇索引(innodb),這個問題比較嚴重,節點下儲存這「行資料」
因為節點下有資料文件,因此節點的分裂會比較慢,innodb的主鍵,盡量用整形而且的遞增的整形,如果無規律的主鍵數據,在葉子節點存儲時,會分裂,分裂的過程得帶著“行數據”重新分,而myisam只記錄了一個地址,只要把地址分裂替換即可。
舉例子:
比如,分裂就像是一個搬家的過程,對於聚簇索引(innodb),搬家真的要把家裡的所有資料全分裂搬走,而非聚簇索引(mysiam),只需要把記錄家的門牌號碼搬走很容易,至於其指向的數據其實不用搬。
三。測試論證:
在innodb引擎下,規律,無規律 兩種方式插入1000條資料。
經過測試,第一種主鍵順序遞增的形式插入,37秒;第二種打亂順序的插入,42秒,整整慢了5秒,預測原因是因為亂序插入,需要進行葉子節點的分裂,它得搬家消耗了時間,也就是說時間差在了節點的分裂和頁面的移動;而順序插入的很少發生節點分裂的情況。
映射結論:
1.讀取操作多用mysiam引擎
2.選擇單調性的數據為索引,會快點
show variables like "%innodb%"
show status;