MySQL 8.4 版本注意事項
每個 InnoDB
資料表都有一個特殊的索引,稱為叢集索引,用於儲存列資料。通常,叢集索引與主鍵同義。為了從查詢、插入和其他資料庫操作中獲得最佳效能,了解 InnoDB
如何使用叢集索引來最佳化常見的查找和 DML 操作非常重要。
當您在資料表上定義
PRIMARY KEY
時,InnoDB
會將其用作叢集索引。每個資料表都應定義一個主鍵。如果沒有邏輯上唯一且非 Null 的欄或欄集可用作主鍵,請新增自動遞增欄。自動遞增欄值是唯一的,並且在插入新列時會自動新增。如果您沒有為資料表定義
PRIMARY KEY
,InnoDB
會使用第一個將所有索引鍵欄定義為NOT NULL
的UNIQUE
索引作為叢集索引。如果資料表沒有
PRIMARY KEY
或合適的UNIQUE
索引,InnoDB
會在包含列 ID 值的合成欄上產生一個名為GEN_CLUST_INDEX
的隱藏叢集索引。列會依InnoDB
指派的列 ID 排序。列 ID 是一個 6 位元組的欄位,會隨著插入新列而單調遞增。因此,依列 ID 排序的列實際上是依插入順序排列的。
透過叢集索引存取列的速度很快,因為索引搜尋會直接導向包含列資料的頁面。如果資料表很大,與使用與索引記錄不同的頁面儲存列資料的儲存組織相比,叢集索引架構通常會節省磁碟 I/O 作業。
除了叢集索引之外的索引稱為次要索引。在 InnoDB
中,次要索引中的每個記錄都包含該列的主鍵欄位,以及為次要索引指定的欄位。InnoDB
使用此主鍵值在叢集索引中搜尋該列。
如果主鍵很長,次要索引會使用更多空間,因此擁有較短的主鍵是有利的。
關於如何利用 InnoDB
叢集索引和次要索引的指南,請參閱第 10.3 節「最佳化與索引」。