在一个字段只有5-10个不同的可能值的情况下使用enum是否有性能优势?如果不是什么优势?MySQL枚举性能优势?
回答
有一个巨大的性能处罚使用ENUM
用于诸如操作:在ENUM
允许值的
查询列表,例如填充一个下拉菜单。您必须从
INFORMATION_SCHEMA
查询数据类型,并将列表解析出返回的BLOB字段。更改允许值的集合。它需要一个
ALTER TABLE
语句,该语句锁定表并可以进行重构。
我不是MySQL的ENUM
的粉丝。我更喜欢使用查找表。另见我对“How to handle enumerations without enum fields in a database?”的回答
没有,看到一个比较here
优势奠定了在代码的可读性。
ENUM由1或2个字节内部表示,具体取决于值的数量。如果你存储的字符串大于2个字节并且很少改变,那么ENUM就是要走的路。使用枚举进行比较会更快,并且它们占用磁盘空间更少,从而可以缩短搜索时间。
缺点是枚举在添加/删除值时不够灵活。
我不确定你指的是哪个版本的MySQL。但自5.0以来,枚举类型的大小是1或2个字节,取决于可能的值的数量根据手册:http://dev.mysql.com/doc/refman/5.0/en/storage-requirements.html既然只有5到10个可能的值,大小应该是1个字节 – Lacek 2016-03-23 12:14:46
@Lacek你是对的!我会将答案从16位更改为1或2字节 – 2016-03-23 14:48:35
在这篇文章中http://fernandoipar.com/2009/03/09/using-the-enum-data-type-to-increase-performance/费尔南多调查查询Enum类型的性能。
结果是,从设计的角度来看,虽然使用ENUM可能看起来不太优雅(如果您的ENUM值有时会发生变化),但对于大型数据集,性能增益显而易见。 查看他的文章了解详情。你同意吗?
- 1. 优势采用枚举
- 2. 带枚举的MySQL枚举
- 3. Linq complex - 枚举性能
- 4. 性能枚举vs类?
- 5. Java枚举的性能?
- 6. Android性能Kotlin枚举类
- 7. 优先枚举名
- 8. 以PLINQ的优势与自定义可枚举扩展
- 9. 具有属性和性能的枚举
- 10. 在枚举语句中枚举mysql枚举
- 11. MySQLi优于MySQL的优势
- 12. 选择枚举值枚举属性
- 13. 优化双回路枚举
- 14. Java中的枚举。优点?
- 15. 不能枚举
- 16. 不能转换UserQuery枚举枚举
- 17. NHibernate的MySQL枚举
- 18. Mysql Select枚举值
- 19. MySQL插入(枚举?)
- 20. MySQL枚举空值
- 21. MySQL性能调优
- 22. Mysql性能调优
- 23. 性能优势java.util.Date compareTo vs before/after?
- 24. Silverlight是否比JavaScript有性能优势?
- 25. 选择标签的性能优势?
- 26. 单罐vs多罐 - 性能优势
- 27. 性能优势。第2轮:VARBINARY vs VARCHAR
- 28. MySQL查询性能的两难境地:枚举VS表
- 29. 在MySQL中使用字符串枚举 - 性能问题
- 30. Html属性枚举
根据你链接的文章,只要你不改变可能的状态,使用ENUM就会有性能优势。 – 2009-12-02 16:57:36