Mysql-叢集索引

黄舟
發布: 2017-01-20 17:07:28
原創
1581 人瀏覽過

整體概述

1.innodb的主索引文件上直接存放該行數據,稱為聚簇索引,次索引指向對主鍵的引用

2.myisam中,主索引和次索引,都指向物理行(磁碟位置)

哈哈,說了兩句貌似聽不懂的話。

一。通俗解釋

我們可以這麼理解:

聚簇索引(innodb):索引的葉節點就是資料節點,下邊實打實有資料。

非聚集索引(myisam): 葉節點仍然是索引節點,有指標指向對應的資料區塊。

用圖說明下:

Mysql-叢集索引

Mysql-叢集索引

看到了把,不同引擎下的類型是不一樣的。

主要區別是葉子節點下是否有資料塊。

(沒有主鍵他也會建立一個的..innodb都是聚集索引來組織的)

二。優點缺點:

分裂問題:

既然是樹結構,葉子節點可能會有分裂現象


那麼問題來了,

對於非聚簇索引(myisam節點位址,內容較小,有快取在記憶體中,分裂快。

對於聚簇索引(innodb),這個問題比較嚴重,節點下儲存這「行資料」

因為節點下有資料文件,因此節點的分裂會比較慢,innodb的主鍵,盡量用整形而且的遞增的整形,如果無規律的主鍵數據,在葉子節點存儲時,會分裂,分裂的過程得帶著“行數據”重新分,而myisam只記錄了一個地址,只要把地址分裂替換即可。

舉例子:

比如,分裂就像是一個搬家的過程,對於聚簇索引(innodb),搬家真的要把家裡的所有資料全分裂搬走,而非聚簇索引(mysiam),只需要把記錄家的門牌號碼搬走很容易,至於其指向的數據其實不用搬。


三。測試論證:

在innodb引擎下,規律,無規律 兩種方式插入1000條資料。

經過測試,第一種主鍵順序遞增的形式插入,37秒;第二種打亂順序的插入,42秒,整整慢了5秒,預測原因是因為亂序插入,需要進行葉子節點的分裂,它得搬家消耗了時間,也就是說時間差在了節點的分裂和頁面的移動;而順序插入的很少發生節點分裂的情況。

Mysql-叢集索引

映射結論:

1.讀取操作多用mysiam引擎

2.選擇單調性的數據為索引,會快點


Mysql-叢集索引

show variables like "%innodb%"

show status;

會發現有一個字段->innodb_pages_written (該字段寫入了多少頁)

入要高於順序寫入的,就是因為分裂移動,所以寫的次數多,時間也用的多,也解釋了為什麼這兩種會存在5秒事件差了。


MyISAM:

這個是預設類型,它是基於傳統的ISAM類型,ISAM是Indexed Sequential Access Method (有索引的順序存取方法) 的縮寫,它是儲存記錄和檔案的標準方法.其他儲存引擎比較,MyISAM具有檢查和修復表格的大多數工具. MyISAM表格可以被壓縮,而且它們支援全文搜尋.它們不是事務安全的,而且也不支援外鍵。如果事物回滾將造成不完全回滾,不具有原子性。如果執行大量 的SELECT,MyISAM是更好的選擇。


InnoDB:這種類型是事務安全的.它與BDB類型具有相同的特性,它們還支持外鍵.InnoDB表格速度很快.具有比BDB還豐富的特性,因此如果需 要一個事務安全的儲存引擎,建議使用它.如果你的資料執行大量的INSERT或UPDATE,出於性能方面的考慮,應該使用InnoDB表以上就是Mysql-聚簇索引的內容,更多相關內容請關注PHP中文網(m.sbmmt.com)!
相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
最新問題
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!