在字段中只有5-10个不同的可能值的情况下使用枚举是否有性能优势?如果没有什么优势?
答案 0 :(得分:44)
使用ENUM
执行以下操作会产生巨大的性能惩罚:
查询ENUM
中的允许值列表,例如填充下拉菜单。您必须从INFORMATION_SCHEMA
查询数据类型,并从返回的BLOB字段中解析列表。
更改允许值集。它需要一个ALTER TABLE
语句,它可以锁定表格并进行重组。
我不是MySQL ENUM
的粉丝。我更喜欢使用查找表。另请参阅我对“How to handle enumerations without enum fields in a database?”
答案 1 :(得分:24)
ENUM由内部表示1或2个字节,具体取决于值的数量。如果您存储的字符串大于2个字节并且很少更改,则可以使用ENUM。使用枚举进行比较会更快,并且它们占用的磁盘空间更少,这反过来又可以缩短搜索时间。
缺点是,在添加/删除值时,枚举的灵活性会降低。
答案 2 :(得分:10)
在本文http://fernandoipar.com/2009/03/09/using-the-enum-data-type-to-increase-performance/中,费尔南多研究了Enum类型的查询表现。
结果是,从设计的角度来看,使用ENUM可能看起来不那么优雅(如果你的ENUM值有时会发生变化),对于大型数据集来说,性能提升是显而易见的。 请参阅他的文章了解详情。你同意吗?
答案 3 :(得分:1)
不,请参阅比较here
优势在于代码可读性。