MySQL索引之集合索引引見。本站提示廣大學習愛好者:(MySQL索引之集合索引引見)文章只能為提供參考,不一定能成為您想要的結果。以下是MySQL索引之集合索引引見正文
在MySQL裡,集合索引和非集合索引分離是甚麼意思,有甚麼差別?
在MySQL中,InnoDB引擎表是(集合)索引組織表(clustered index organize table),而MyISAM引擎表則是堆組織表(heap organize table)。
也有人把集合索引稱為聚簇索引。
固然了,集合索引的概念不是MySQL裡獨有的,其他數據庫體系也異樣有。
簡言之,集合索引是一種索引組織情勢,索引的鍵值邏輯次序決議了表數據行的物理存儲次序,而非集合索引則就是通俗索引了,僅僅只是對數據列創立響應的索引,不影響全部表的物理存儲次序。
我們先來看看兩種存儲情勢的分歧的地方:
簡略說,IOT內外數據物理存儲次序和主鍵索引的次序分歧,所以假如新增數據是團圓的,會招致數據塊趨於團圓,而不是趨於次序。而HOT表數據寫入的次序是按寫入時光次序存儲的。
IOT表比擬HOT表的優勢是:
規模查詢效力更高;
數據頻仍更新(集合索引自己不更新)時,更不輕易發生碎片;
特殊合適有一小部門熱門數據頻仍讀寫的場景;
經由過程主鍵拜訪數據時疾速可達;
IOT表的缺乏則有:
數據變更假如是團圓為主的話,那末效力會比HOT表差;
HOT表的缺乏有:
索引回表讀開支很年夜;
年夜部門數據讀取時隨機的,沒法包管被次序讀取,開支年夜;
每張InnoDB表只能創立一個集合索引,集合索引可以由一列或多列構成。
下面說過,InnoDB是集合索引組織表,它的集合索引選擇規矩是如許的:
起首選擇顯式界說的主鍵索引做為集合索引;
假如沒有,則選擇第一個不許可NULL的獨一索引;
照樣沒有的話,就采取InnoDB引擎內置的ROWID作為集合索引;
我們來看看InnoDB主鍵索引的表示圖:
圖片來自高機能MySQL
可以看到,在這個索引構造的葉子節點中,節點key值是主鍵的值,而節點的value則存儲其他列數據,和額定的ROWID、rollback pointer、trx id等信息。
聯合這個圖,和下面所述,我們可以曉得:在InnoDB表中,其集合索引相當於整張表,而整張表也是集合索引。主鍵必定是集合索引,而集合索引則未必是主鍵。
MyISAM是堆組織表,它沒有集合索引的概念。