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