MySQL Enum 性能优势?
在字段只有 5-10 个可能的不同值的情况下,使用枚举是否具有性能优势? 如果不是有什么好处?
Is there a performance advantage to using enum in situations where there are only 5-10 different possible values for a field? if not what is the advantage?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
使用
ENUM
进行以下操作会带来巨大的性能损失:查询
ENUM
中允许的值列表,例如填充下拉菜单。 您必须从INFORMATION_SCHEMA
查询数据类型,并从返回的 BLOB 字段中解析列表。更改允许值集。 它需要一个
ALTER TABLE
语句,该语句会锁定表并可能进行重组。我不喜欢 MySQL 的
ENUM
。 我更喜欢使用查找表。 另请参阅我对“如何处理数据库中没有枚举字段的枚举?”There is a huge performance penalty to using
ENUM
for operations such as:Query the list of permitted values in the
ENUM
, for instance to populate a drop-down menu. You have to query the data type fromINFORMATION_SCHEMA
, and parse the list out of a BLOB field returned.Alter the set of permitted values. It requires an
ALTER TABLE
statement, which locks the table and may do a restructure.I'm not a fan of MySQL's
ENUM
. I prefer to use lookup tables. See also my answer to "How to handle enumerations without enum fields in a database?"ENUM 在内部由 1 或 2 个字节表示,具体取决于值的数量。 如果您存储的字符串大于 2 个字节并且很少更改,那么 ENUM 是最佳选择。 使用枚举进行比较会更快,并且它们占用的磁盘空间更少,这反过来又会导致更快的寻道时间。
缺点是枚举在添加/删除值时不太灵活。
ENUMs are represented internally by 1 or 2 bytes, depending on the number of values. If the strings you're storing are larger than 2 bytes and rarely change, then an ENUM is the way to go. Comparison will be faster with an enum and they take up less space on disk, which in turn can lead to faster seek times.
The downside is that enums are less flexible when it comes to adding/removing values.
在本文中 使用 ENUM 数据类型以提高性能 Fernando 研究了 Enum 类型的查询性能。
结果是,虽然从设计的角度来看,使用 ENUM 似乎不太优雅(如果您的 ENUM 值有时会发生变化),但对于大型数据集来说,性能提升是显而易见的。
详情请参阅他的文章。 你同意?
In this article Using the ENUM data type to increase performance Fernando looks into performances of Enum type for queries.
The result is that while using ENUM might seem a little less elegant from a design point of view (if your ENUM value are changing sometimes), the performance gain is obvious for large datasets.
See his article for details. Do you agree?
不,请参阅比较 这里
优点在于代码可读性。
No, see a comparison here
The advantage lays in code readability.