簡體   English   中英

如何用 MySQL 中的自動生成值替換主鍵?

[英]How to replace primary key with new column with autogenerated values in MySQL?

我有一張帶有下幾列的merchants表: name, program_id, program_name 當前主鍵為name + program_id

我需要做的是添加一個新的列id ,用自動生成的值(最好是 uuid 或類似的東西)填充它並使其成為新的主鍵。

怎么做?

ALTER table merchants DROP PRIMARY KEY, ADD id INT NOT NULL AUTO_INCREMENT PRIMARY KEY;

如果您的數據庫引擎是innodb,我建議您使用自增integer 作為主鍵,而不是uuid,因為innodb 中的主鍵是聚集索引。自增primaryk 鍵可以減少分頁。

請注意,不僅插入具有 UUID 主鍵的行需要更長的時間,而且生成的索引要大得多。 其中一些是由於較大的主鍵,但其中一些無疑是由於頁面拆分和由此產生的碎片。

以及使用順序主鍵的缺點:

  • 目標頁面可能已刷新到磁盤並從緩存中刪除,或者可能從未放入緩存中,在這種情況下,InnoDB 必須找到它並從磁盤中讀取它,然后才能插入新行。 這會導致大量隨機 I/O。
  • 當插入無序時,InnoDB 必須頻繁拆分頁面以為新行騰出空間。 這需要移動大量數據,並修改至少三頁而不是一頁。
  • 由於拆分,頁面變得稀疏且不規則地填充,因此最終數據是碎片化的。

如果您想了解更多關於主鍵對頁面拆分或頁面合並的影響,您可以訪問這里

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM