聚集索引和二級索引
每張使用 InnoDB 作為存儲引擎的表都有一個特殊的索引稱為聚集索引,它保存著每一行的數據,通常,聚集索引就是主鍵索引。為了得到更高效的查詢、插入以及其他的數據庫操作的性能,你必須理解 InnoDB 引擎是如何使用聚集索引來優化常見的查找和 DML 操作。
- 如果你的表定義了一個主鍵,InnoDB 就使用它作為聚集索引。因此,儘可能的為你的表定義一個主鍵,如果實在沒有一個數據列是唯一且非空的可以作為主鍵列,建議添加一個自動遞增列作為主鍵列。
- 如果你的表沒有定義主鍵,InnoDB 會選擇第一個唯一非空索引來作為聚集索引。
- 如果你的表既沒有主鍵,又沒有合適的唯一索引,InnoDB 內部會生成一個隱式聚集索引 —— GEN_CLUST_INDEX,該索引建立在由 rowid 組成的合成列上。數據行根據 InnoDB 分配的 rowid 排序,rowid 是一個 6 字節的字段,隨著數據插入而單調遞增。也就是說,數據行根據 rowid 排序實際上是根據插入順序排序。
聚集索引如何提升查詢效率
通過聚集索引來訪問一行數據是非常快的,這是因為所有的行數據和索引在同一頁上。如果表特別大,相較於行數據和索引在不同頁上存儲結構(比如 myisam 引擎),這將大大節省磁盤 I/O 資源。
二級索引和聚集索引如何關聯
除了聚集索引外的其他索引類型都屬於二級索引。在 InnoDB 中,二級索引中的每個記錄都包含該行的主鍵列,以及二級索引指定的列;聚集索引中,InnoDB 通過主鍵值來查詢數據行。
如果主鍵過長,二級索引就需要更大的空間,因此,使用短的主鍵列是很有利的。
閱讀更多 碼農阿崔 的文章