mysql聚簇索引設定 Mysql 聚簇索引

2021-10-18 11:56:47 字數 1923 閱讀 4819

整體概述

1.innodb的主索引檔案上 直接存放該行資料,稱為聚簇索引,次索引指向對主鍵的引用

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

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

一。通俗解釋

我們可以這麼理解:

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

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

用圖說明下:

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

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

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

二。優缺點:

**問題:

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

那麼問題來了,

對於非聚簇索引(myisam),節點下儲存的對物理行位址,內容較小,有快取在記憶體中,**快。

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

因為節點下有資料檔案,因此節點的**會比較慢,innodb的主鍵,盡量用整形而且的遞增的整形,如果無規律的主鍵資料,在葉子節點儲存時,會**,**的過程得帶著「行資料」重新分,而myisam只記錄了乙個位址,只要把位址**替換即可。

舉例子:

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

三。測試論證:

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

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

對映結論:

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 聚簇索引例項 MySQL聚簇索引

mysql作為迭代了很多個版本的資料庫。在資料庫的索引上實現了很多的優化版本,從一開始的只允許乙個表有乙個列為索引值,到目前版本可支援多個列建立索引值,更多關於索引優化版本的描述,以後有機會筆者再寫一篇文章。本文主要介紹索引當中的聚簇索引。mysql官方對聚簇索引的定義是,聚簇索引並不是一種單獨的索...

mysql 聚簇索引表 Mysql的聚簇索引

聚簇索引並不是一種單獨的索引型別,而是一種資料儲存方式。innodb的聚簇索引實際上是在同乙個結構中儲存了b tree索引和資料行。乙個表只能有乙個聚簇索引。innodb中,葉子頁包含了行的全部資料,但是節點頁只包含了索引列。innodb通過主鍵聚集資料。優點 1.可以把相關資料儲存在一起。例如實現...

MySQL 聚簇索引 和 非聚簇索引

索引節點的葉子頁面就好比一片葉子。葉子頭便是索引鍵值。先建立一張表 create table user id intnot null name varchar notnull class varchar notnull 對於myisam引擎,如果建立 id 和 name 為索引。對於下面查詢 sel...