《Mysql應用MySQL索引之聚集索引介紹》要點:
本文介紹了Mysql應用MySQL索引之聚集索引介紹,希望對您有用。如果有疑問,可以聯系我們。
在MySQL里,湊集索引和非湊集索引分別是什么意思,有什么區別?MYSQL教程
在MySQL中,InnoDB引擎表是(湊集)索引組織表(clustered index organize table),而MyISAM引擎表則是堆組織表(heap organize table).MYSQL教程
也有人把湊集索引稱為聚簇索引.MYSQL教程
當然了,湊集索引的概念不是MySQL里特有的,其他數據庫系統也同樣有.MYSQL教程
簡言之,聚集索引是一種索引組織形式,索引的鍵值邏輯順序決定了表數據行的物理存儲順序,而非聚集索引則便是普通索引了,僅僅只是對數據列創建相應的索引,不影響整個表的物理存儲順序.MYSQL教程
我們先來看看兩種存儲形式的分歧之處:MYSQL教程
簡單說,IOT內外數據物理存儲順序和主鍵索引的順序一致,所以如果新增數據是離散的,會導致數據塊趨于離散,而不是趨于順序.而HOT表數據寫入的順序是按寫入時間順序存儲的.MYSQL教程
IOT表相比HOT表的優勢是:MYSQL教程
范圍查詢效率更高;MYSQL教程
數據頻繁更新(聚集索引自己不更新)時,更不容易產生碎片;MYSQL教程
特別適合有一小部門熱點數據頻繁讀寫的場景;MYSQL教程
通過主鍵拜訪數據時快速可達;MYSQL教程
IOT表的不敷則有:MYSQL教程
數據變化如果是離散為主的話,那么效率會比HOT表差;MYSQL教程
HOT表的不敷有:MYSQL教程
索引回表讀開銷很大;MYSQL教程
大部門數據讀取時隨機的,無法保證被順序讀取,開銷大;MYSQL教程
每張InnoDB表只能創立一個聚集索引,聚集索引可以由一列或多列組成.MYSQL教程
上面說過,InnoDB是湊集索引組織表,它的湊集索引選擇規則是這樣的:MYSQL教程
首先選擇顯式定義的主鍵索引做為湊集索引;MYSQL教程
如果沒有,則選擇第一個不允許NULL的唯一索引;MYSQL教程
還是沒有的話,就采納InnoDB引擎內置的ROWID作為聚集索引;MYSQL教程
我們來看看InnoDB主鍵索引的示意圖:MYSQL教程
MYSQL教程
圖片來自高性能MySQLMYSQL教程
可以看到,在這個索引結構的葉子節點中,節點key值是主鍵的值,而節點的value則存儲別的列數據,以及額外的ROWID、rollback pointer、trx id等信息.MYSQL教程
結合這個圖,以及上面所述,我們可以知道:在InnoDB表中,其湊集索引相當于整張表,而整張表也是湊集索引.主鍵必然是湊集索引,而湊集索引則未必是主鍵.MYSQL教程
MyISAM是堆組織表,它沒有湊集索引的概念.MYSQL教程
《Mysql應用MySQL索引之聚集索引介紹》是否對您有啟發,歡迎查看更多與《Mysql應用MySQL索引之聚集索引介紹》相關教程,學精學透。維易PHP學院為您提供精彩教程。