Mysql

如果不使用主鍵,索引它是否有意義?

  • May 24, 2017

我有一個包含許多表的數據庫,這些表可以通過索引鍵(主鍵和外鍵)連接。有些表是事務表,它們有一個自動增量主鍵,只是為了為每個事務定義一個 ID。

為了使用這個數據庫並處理數據(清理、添加新列),我複制了數據庫。新數據庫上的過程(更新、插入)相當複雜。我在有意義的地方索引列,但我不想索引由於性能原因我不需要的列。

現在,我來重點了:有幾個巨大的事務表已從原始數據庫中定義為主鍵,但不用作連接鍵。我想刪除這些主鍵(不是列,而只是:ALTER TABLE trans DROP PRIMARY KEY)以避免索引列過多。有什麼理由不刪除主鍵上的索引嗎?

如果這個問題取決於 RDBMS:我使用 MySQL/MariaDB。

在 MySQL 中,如果你有一個 auto_increment 列,它也必須是一個鍵/索引(主要的或唯一的或非唯一的,所以實際上是任何索引),其中自動增量列是索引/鍵定義中的第一個。

對於任何沒有定義PRIMARYorUNIQUE NOT NULL鍵的 InnoDB 表,MySQL 將在後台隱式創建(6 字節)內部鍵並將其用作聚集索引。

這個聚集鍵(PRIMARY或第一個UNIQUE NOT NULL或 6 字節內部)始終包含在 MySQL 中 InnoDB 表的所有二級索引中。

在您的情況下,刪除PRIMARY密鑰只會導致 MySQL 創建一個隱式密鑰(除非您明確定義另一個PRIMARYUNIQUE NOT NULL密鑰)。這也僅適用於 InnoDB 表。

引用自:https://dba.stackexchange.com/questions/174445