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

2021-10-17 22:57:13 字數 898 閱讀 5744

聚簇索引並不是一種單獨的索引型別,而是一種資料儲存方式。innodb的聚簇索引實際上是在同乙個結構中儲存了b-tree索引和資料行。乙個表只能有乙個聚簇索引。

innodb中,葉子頁包含了行的全部資料,但是節點頁只包含了索引列。innodb通過主鍵聚集資料。

優點:1. 可以把相關資料儲存在一起。例如實現電子郵箱時,可以根據使用者的id,來聚集資料,這樣只要從磁碟讀取少數的資料頁就能獲取某個使用者的全部郵件。如果沒有使用聚簇索引,則每封郵件都可能導致一次磁碟io。

2. 資料訪問更快。將索引和資料儲存在同乙個b-tree中。

3. 使用覆蓋索引掃瞄的查詢可以直接使用頁節點的主鍵值。

缺點:1. 聚簇索引最大限度的提高了io密集型應用的效能,但是如果資料都在記憶體中,就沒什麼優勢了。

2. 插入的速度嚴重依賴於插入順序。按照主鍵插入是資料載入到innodb表中最快的。(但是高併發時,主鍵的上界會成為『熱點』,同時併發插入時,間隙鎖競爭比較嚴重)

3. 更新聚簇索引列的代價很高,會強制innodb將每個更新的行資料移動到新的位置。

4.  插入的時候可能會導致「也**」的問題。如果插入到某個已滿的頁中,儲存引擎會講該頁**成兩個頁面來容納改行,會導致表占用更多的磁碟空間。

5. 聚簇索引可能導致全表掃瞄變慢,尤其是航比較稀疏,頁**導致資料儲存不連續。

6. 二級索引可能比想象的要大,因為在二級索引中葉子節點包含了引用行的主鍵列。

7. 二級索引訪問需要兩次索引查詢,而不是一次。二級索引需要先找到葉子節點獲得對應的主鍵值,然後根據這個值去聚簇索引中查詢對應的行。innodb的自適應雜湊索引能夠減少這樣的重複工作。

innodb的二級索引,儲存不是「行指標」,而是主鍵值,並以此作為指向行的「指標」。這樣會使二級索引占用更多的空間,換來的好處是,innodb在移動行時無需更新二級索引中的這個「指標」。

mysql 聚簇索引例項 MySQL聚簇索引

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

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

整體概述 1.innodb的主索引檔案上 直接存放該行資料,稱為聚簇索引,次索引指向對主鍵的引用 2.myisam中,主索引和次索引,都指向物理行 磁碟位置 哈哈,說了兩句貌似聽不懂的話。一。通俗解釋 我們可以這麼理解 聚簇索引 innodb 索引的葉節點就是資料節點,下邊實打實有資料。非聚簇索引 ...

MySQL 聚簇索引

聚簇索引並不是一種單獨的索引型別,而是一種資料儲存的方式。聚簇索引表 innodb 的資料是放在葉子節點,而非聚簇索引 myisam 的的葉子節點是存放指向資料行的指標。要是每個索引列都存放著資料,那麼將產生巨大的儲存消耗,故一般只有在主鍵列的索引 主鍵索引 的葉子節點存放著資料,其它非主鍵索引葉子...