MySQL Enum的性能优势?

时间:2009-04-19 22:52:05

标签: mysql enums

在字段中只有5-10个不同的可能值的情况下使用枚举是否有性能优势?如果没有什么优势?

4 个答案:

答案 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

优势在于代码可读性。