2009-04-19 61 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