2011-11-12 26 views
1

Table1有3列:id(autoincrement),citynumber(unique),description(varchar(1000))。 列ID從未在查詢中使用。它只是爲了我的方便(查看錶如何增長,引用id更容易,而不是城市編號,儘管在進行sql查詢時從不使用id)。MySQL:附加id列vs性能

您是否強烈建議刪除id列以提高性能?

回答

1

刪除id列不會增加性能,或者至少不是一個明智的方式。您只能保存相同的磁盤。此外,PK給你帶來的好處通常比節省空間要好得多。

0

不,ID列幾乎總是在那裏。如果你想添加更多的表格並想加入它們,ID列將派上用場。它根本不應該影響性能,只有很小的空間消耗差異。

0

表現取決於您的查詢。如果citynumber確實是唯一的(這是否是一個自然的關鍵?),那麼在該列上放置索引將極大地幫助您加入或過濾。

1

我知道這是爭論的問題,一般來說,我認爲最好的做法是在表上保留索引,即使它們是外觀表。只是我的意見與遺留的代碼和數據庫表沒有索引,後來需要它們一起工作。是的,這是一個較小的更新聲明,但數據庫仍然需要重新對所有內容進行相應的重新索引,這可能會影響此更新期間的性能。

只是我的看法。

0

假設您只在數據庫中存儲真實(非虛構)的城市,您可以輕鬆存儲所有世界城市,而不必擔心性能 - 數據集很小。

0

在InnoDB中,PK的工作速度比Unique索引快,因爲PK指向數據,而Unique指向PK,並且僅在這之後 - 纔是數據。

因此,刪除ID,並使citynumber成爲主鍵。

斯蒂爾,它不會給你很多表現改善。

+0

放棄你對'獨特'約束vs PKs的觀點,我看不到刪除'id'列的理由。替代關鍵對等點到自然鍵是有用的。即使where子句反對citynumber列,聯接仍然可能不符合代理PK – dlgrasse

+0

爲什麼使用加入對抗surogate PK?就我而言,據我所知,id和citynumber的數據類型可能是相同的。 – Oroboros102

+0

可能。我在回答中詢問城市號是否是天然的關鍵,但沒有得到任何迴應。至於爲什麼加入替代品,我會回答那是他們在那裏的原因。根據定義,它們僅用於數據庫目的,並且應該沒有外部含義。 – dlgrasse