2009-04-19 88 views

回答

39

有一個巨大的性能處罰使用ENUM用於諸如操作:在ENUM允許值的

  • 查詢列表,例如填充一個下拉菜單。您必須從INFORMATION_SCHEMA查詢數據類型,並將列表解析出返回的BLOB字段。

  • 更改允許值的集合。它需要一個ALTER TABLE語句,該語句鎖定表並可以進行重構。

我不是MySQL的ENUM的粉絲。我更喜歡使用查找表。另見我對「How to handle enumerations without enum fields in a database?」的回答

1

沒有,看到一個比較here

優勢奠定了在代碼的可讀性。

+10

根據你鏈接的文章,只要你不改變可能的狀態,使用ENUM就會有性能優勢。 – 2009-12-02 16:57:36

24

ENUM由1或2個字節內部表示,具體取決於值的數量。如果你存儲的字符串大於2個字節並且很少改變,那麼ENUM就是要走的路。使用枚舉進行比較會更快,並且它們佔用磁盤空間更少,從而可以縮短搜索時間。

缺點是枚舉在添加/刪除值時不夠靈活。

+0

我不確定你指的是哪個版本的MySQL。但自5.0以來,枚舉類型的大小是1或2個字節,取決於可能的值的數量根據手冊:http://dev.mysql.com/doc/refman/5.0/en/storage-requirements.html既然只有5到10個可能的值,大小應該是1個字節 – Lacek 2016-03-23 12:14:46

+0

@Lacek你是對的!我會將答案從16位更改爲1或2字節 – 2016-03-23 14:48:35