【发布时间】:2010-10-20 11:02:13
【问题描述】:
在一个字段只有 5-10 个不同的可能值的情况下使用枚举是否有性能优势?如果不是,有什么好处?
【问题讨论】:
在一个字段只有 5-10 个不同的可能值的情况下使用枚举是否有性能优势?如果不是,有什么好处?
【问题讨论】:
将ENUM 用于以下操作会带来巨大的性能惩罚:
查询ENUM 中的允许值列表,例如填充下拉菜单。您必须从 INFORMATION_SCHEMA 查询数据类型,并从返回的 BLOB 字段中解析出列表。
更改允许值集。它需要一个ALTER TABLE 语句,该语句锁定表并可能进行重组。
我不是 MySQL 的ENUM 的粉丝。我更喜欢使用查找表。另请参阅我对“How to handle enumerations without enum fields in a database?”的回答
【讨论】:
ENUM 在内部由 1 或 2 个字节表示,具体取决于值的数量。如果您存储的字符串大于 2 个字节并且很少更改,那么 ENUM 就是要走的路。使用枚举进行比较会更快,并且它们占用的磁盘空间更少,这反过来会导致更快的寻道时间。
缺点是枚举在添加/删除值时不太灵活。
【讨论】:
在这篇文章中Using the ENUM data type to increase performanceFernando 研究了 Enum 类型的查询性能。
结果是,虽然从设计的角度来看,使用 ENUM 可能看起来不那么优雅(如果您的 ENUM 值有时会发生变化),但对于大型数据集而言,性能提升是显而易见的。
嗯,很明显,从设计的角度来看,使用 ENUM 可能看起来不那么优雅(如果我在不止一个表中使用类型会发生什么?如果我想添加一个类型怎么办?我必须改变表格!),性能优势,如果我要处理大量数据(我的测试是少量的,但我没有服务器,只是一个非常简陋的笔记本)可能是值得的.
详情请参阅他的文章。你同意吗?
【讨论】:
不,看比较here
优势在于代码可读性。
【讨论】: