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