MySQL 缺少主鍵的表的效能下降的原因

張衝andy發表於2023-10-04

MySQL 為什麼缺少主鍵的表的效能下降?

因為每個Innodb表都是一個索引組織的表,每個Innodb表的 leaf level 都由一個鍵標識。如果表上定義了主鍵,則該主鍵標識每一行。

對於表上定義的每個附加索引(非主鍵索引),主鍵被附加在索引鍵上,以標識表葉級別的行。

當表上沒有定義主鍵時會發生什麼?

MySQL伺服器為每個錶行生成一個行ID,稱為DB_ROW_ID。DB_ROW_ID的大小是一個6位元組的自動遞增鍵。生成DB_ROW_ID使用dict_sys_get_new_row_id()函式,該函式轉換為資料字典互斥體。由dict0dict.cc建立的互斥體DICT_SYS。換句話說,對於插入到沒有主鍵的表中的每個新行,它需要在資料字典上鎖定以生成該鍵,因為生成的鍵在例項範圍內是 uniq的。資料字典互斥體DICT_SYS不僅用於生成DB _ ROW _ IDs,還用於Innodb Engine中的許多其他重要地方。因此,如果表缺少主鍵,MySQL伺服器例項上的爭用就會增加。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31383567/viewspace-2986946/,如需轉載,請註明出處,否則將追究法律責任。

相關文章