2012-10-10 75 views
1

我有一個任務:MySQL的INT VS布爾指數

記錄數據庫可以在狀態:

NEW = 1 
CONFIRMED = 2 
FINISHED = 3 
DELETED = 4 

1.

我可以將它們存儲在INT領域,隨着指數爲它,然後選擇這樣的:

... WHERE status = FINISHED ... 
... WHERE status = DELETED ... 

2.

也我可以存儲它們作爲4分離布爾字段

,然後選擇:

... WHERE finished_field = True ... 
... WHERE deleted_field = True ... 

這種情況下,在性能更好(對於選擇)1或2,和它所必要的創建在字段索引案例2?

+1

不使用4位字段。 –

+1

這很可能無關緊要 - 除非您擁有數十億記錄,否則性能差異可能不值得考慮。我會說只是使用[SET](http://dev.mysql.com/doc/refman/5.1/en/set.html),並用它來完成 –

回答

0

在性能方面,我不確定他們會做出什麼區別,但在可維護性方面,最好有一個可以採用不同值的狀態字段,而不是每個狀態都有一列。如果明天你需要一個新的狀態,第二個選項你將不得不改變表模式,而第一個選項只需要使用一個新的狀態標識符(例如「RESTORED = 5」)。

0

表現可能無關緊要。更重要的是數據庫設計。如果使用4位字段,則可以將多於1個狀態設置爲true。這不應該發生。您可以通過觸發器來防止這種情況,但由於只有一種狀態,所以最好有一個狀態字段。

這樣你就不必組合多個字段。

0

由於您可以對該字段進行索引,因此第一個選項將有更好的機會獲得更好的性能。索引布爾型字段沒有效果,因爲沒有足夠的不同值,MySQL將忽略該索引。

使用一個字段更有可能實際使用索引。

最後有一些實際的考慮。第一個選項可以更容易地添加另一種狀態,它將確保一個記錄只能有一個狀態,並且您的表的大小會變小。