MySQL 缺少主鍵的表的效能下降的原因
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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- MySQL不建議用UUID做innodb主鍵的幾條原因MySqlUI
- MySQL 中的自增主鍵MySql
- MySQL新增自增主鍵的坑MySql
- 揪出那個無主鍵的表
- MYSQL 主從不一致的原因分析MySql
- mysql建表必須使用主鍵嗎MySql
- MYSQL 主鍵的那些 “有意思” 故事MySql
- PostgreSQL 建立主鍵自增表的 DDLSQL
- 向Mysql主鍵自增長表中新增資料並返回主鍵MySql
- 深入瞭解MySQL中的自增主鍵MySql
- MySQL:雙主單寫 主庫偶爾出現大量延遲的原因MySql
- MySQL 分割槽表,為什麼分割槽鍵必須是主鍵的一部分?MySql
- mysql innodb 主鍵INT、BIGINT、VARCHAR併發插入效能對比MySql
- MySQL 8 新特性之自增主鍵的持久化MySql持久化
- [MySQL]為什麼主鍵最好是有序遞增的MySql
- MySQL 選錯索引的原因?MySql索引
- ORACLE 在缺少主鍵ID的情況下刪除重複資料,只保留一行Oracle
- MySQL 預設排序真的是按主鍵來排序的嗎MySql排序
- MySQL 資料庫自增主鍵生成的優缺點MySql資料庫
- 要慎用mysql的enum欄位的原因MySql
- MySQL 偶爾抽風,效能突然下降MySql
- 新的主鍵和外來鍵的語法
- 檢視MySQL鎖等待的原因MySql
- mysql ibdata1太大的原因MySql
- mysql預先取自動增長主鍵的下一個值MySql
- MYSQL的外來鍵MySql
- 《高效能MySQL》筆記——MySQL建表資料型別的選擇MySql筆記資料型別
- MySQL 主鍵自增也有坑?MySql
- 關於MySQL InnoDB表的二級索引是否加入主鍵的總結MySql索引
- 本地無法連線Mysql的原因MySql
- MyBatis的Insert操作自增主鍵的實現,Mysql協議與JDBC實現MyBatisMySql協議JDBC
- 分庫分表的 9種分散式主鍵ID 生成方案,挺全乎的分散式
- java面試一日一題:mysql中的自增主鍵Java面試MySql
- Optional 的使用會導致效能下降嗎?
- 【mysql】mysql的資料庫主從(一主一從)MySql資料庫
- Mysql關於自增主鍵,自增主鍵優化總結MySql優化
- MySQL的主從複製MySql
- mysql主從和主備的區別MySql