本文介紹了MySQL是為主鍵創建額外的索引還是將數據本身用作索引的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!
問題描述
找不到明確的答案。
我知道當您創建主鍵時,MySQL會根據該主鍵對數據進行排序,問題是,它實際上是創建了另一個索引,還是使用實際數據作為索引,因為它應該按主鍵排序?
編輯:
如果我有一個表,具有索引A和索引B,但沒有主鍵,那么我有數據+索引A+索引B。如果我將表更改為將索引A的列作為主鍵,我將只有數據(它也用作索引)+索引B,對嗎?以上是內存使用量
推薦答案
Clustered and Secondary Indexes
每個InnoDB表都有一個特殊的索引,稱為聚集索引,行的數據存儲在其中。通常,聚集索引是主鍵的同義詞。要從查詢、插入和其他數據庫操作中獲得最佳性能,您必須了解InnoDB如何使用聚集索引來優化每個表的最常見的查找和DML操作。
在表上定義主鍵時,InnoDB會將其用作聚集索引
如果您沒有為表定義主鍵,MySQL將定位所有鍵列都不為空的第一個唯一索引,并且InnoDB將其用作聚集索引。
如果表沒有主鍵或合適的唯一索引,InnoDB會在包含行ID值的合成列上在內部生成一個名為GEN_CLUST_INDEX的隱藏聚集索引。按照InnoDB分配給此類表中各行的ID進行排序。行ID是一個6字節的字段,隨著新行的插入而單調增加。因此,按行ID排序的行實際上是按插入順序排列的。
聚集索引如何加快查詢速度
通過聚集索引訪問行很快,因為索引搜索直接指向包含所有行數據的頁。如果表很大,則與使用索引記錄中的不同頁存儲行數據的存儲組織相比,聚集索引體系結構通常可以節省磁盤I/O操作。
這篇關于MySQL是為主鍵創建額外的索引還是將數據本身用作索引的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,