2016-02-12 58 views
0

我可以在互聯網上找到的所有東西都解釋了這兩種索引之間的差異,這不是我的問題。MySql`id`列有'PRIMARY'和'UNIQUE'索引,這是理想嗎?

當我在數據庫中創建一個新表時,我總是創建一個id主鍵,因爲我相信大多數人都這麼做。我總是讓它PRIMARY KEY, NOT NULL, UNIQUE, AUTO_INCREMENT

我最近越來越大進添加自定義指標,我發現我的id字段有這兩個指數的(自動創建的,原因很明顯):

There is a PRIMARY index 
There is also a UNIQUE index 

我的假設是,由於PK標誌(主鍵)自動生成'PRIMARY'索引,並且由於UNIQUE標誌'UNIQUE'索引已創建。

我假設在同一列上有兩個索引會增加不必要的開銷。我的問題是,這是真的嗎?我應該刪除這些索引中的一個嗎?或者在我的id列上創建這兩個索引是否正常/理想?

+0

唯一的密鑰是多餘的。 – symcbean

回答

0

PRIMARY KEY(x), UNIQUE(x) - 由於PRIMARY KEY通過定義(在MySQL)UNIQUE,後來的索引是多餘的,應當被丟棄。

另外,在UNIQUE(x), INDEX(x)中,INDEX(x)是多餘的。

冗餘索引佔用額外的空間。 (在將來的版本中,他們甚至可能被禁止 - 這是多麼無用)。

每張表應該(或甚至「必須」)有一個PRIMARY KEY。它可以是AUTO_INCREMENT,也可以是一些「自然」鍵。 「自然」在某種意義上說是UNIQUE,從不是NULL。在一個簡短的調查中,我發現只有25%的表格有AUTO_INCREMENT列。

More on indexing

不要忘記考慮「複合」索引,如INDEX(a,b)