在仅有 5-10 种可能值的字段情况下,使用枚举是否具有性能优势?如果没有,那么它的优点是什么?
使用ENUM
进行操作时存在巨大的性能惩罚,如:
查询ENUM
中允许值的列表,例如填充下拉菜单。 您必须从INFORMATION_SCHEMA
查询数据类型,并从返回的BLOB字段中解析列表。
更改允许的值集。 它需要一个ALTER TABLE
语句,这将锁定表并可能进行重构。
我不喜欢MySQL的ENUM
。 我更喜欢使用查找表。 另请参阅我的答案:“如何处理数据库中没有枚举字段的枚举?”
ENUMs 内部使用 1 或 2 字节表示,取决于值的数量。如果你存储的字符串大于 2 字节且很少更改,则 ENUM 是一个好选择。与字符串比较相比,枚举比较更快,并且它们在磁盘上占用更少的空间,这反过来可以导致更快的查找时间。
缺点是枚举在添加/删除值时不太灵活。