天天看點

MySQL索引之聚集索引

聚集索引和非聚集索引的根本差別是表記錄的排列順序和與索引的排列順序是否一緻

葉節點存放着所有資料。不同點是葉節點是否存放着一整行資料

聚集索引可以建立在任何一列你想建立的字段上,這是從理論上講,實際情況并不能随便指定,否則在性能上會是惡夢

我們可以在學分以及學生姓名上建立聯合非聚集索引,此時的索引就形成了覆寫索引,即索引所存儲的内容就是最終輸出的資料,這種索引在比以學分為聚集索引做查詢性能更好。

為什麼主鍵上建立非聚集索引比主鍵上建立聚集索引在插入資料時要快

聚集索引對應的缺點就是修改慢,因為為了保證表中記錄的實體和索引順序一緻,在記錄插入的時候,會對資料頁重新排序。

MYISAM根本就沒有 聚集索引

INNODB,主鍵就是 聚集索引,你也無法修改

在MySQL中,InnoDB引擎表是(聚集)索引組織表(clustered index organize table),而MyISAM引擎表則是堆組織表(heap organize table)。

簡言之,聚集索引是一種索引組織形式,索引的鍵值邏輯順序決定了表資料行的實體存儲順序,而非聚集索引則就是普通索引了,僅僅隻是對資料列建立相應的索引,不影響整個表的實體存儲順序。

每張InnoDB表隻能建立一個聚集索引,聚集索引可以由一列或多列組成。

上面說過,InnoDB是聚集索引組織表,它的聚集索引選擇規則是這樣的:

首先選擇顯式定義的主鍵索引做為聚集索引;

如果沒有,則選擇第一個不允許NULL的唯一索引;

還是沒有的話,就采用InnoDB引擎内置的ROWID作為聚集索引;

本文轉自 liqius 51CTO部落格,原文連結:http://blog.51cto.com/szgb17/1973652,如需轉載請自行聯系原作者