在一个字段只有5-10个不同的可能值的情况下,使用枚举是否具有性能优势?如果不是,优势是什么?
发布于 2009-04-19 23:14:18
使用ENUM执行以下操作会带来巨大的性能损失:
ENUM中的允许值列表,例如填充下拉菜单。您必须从INFORMATION_SCHEMA查询数据类型,并从BLOB字段中解析出一组允许值的列表。它需要一条ALTER TABLE语句,该语句将锁定表并可能执行重新构造。我不是MySQL的ENUM的粉丝。我更喜欢使用查找表。另请参阅我对"How to handle enumerations without enum fields in a database?“的回答
发布于 2009-04-19 22:58:31
ENUM在内部由1个或2个字节表示,具体取决于值的数量。如果您存储的字符串大于2个字节,并且很少更改,那么ENUM就是一种选择。使用枚举进行比较会更快,并且它们占用的磁盘空间更少,这反过来可以导致更快的寻道时间。
缺点是,当涉及到添加/删除值时,枚举的灵活性较差。
发布于 2012-10-25 20:26:31
在本文中,Using the ENUM data type to increase performance Fernando研究了枚举类型查询的性能。
结果是,虽然从设计的角度来看,使用ENUM似乎不那么优雅(如果您的ENUM值有时会发生变化),但对于大型数据集,性能提升是显而易见的。
很明显,从设计的角度来看,使用
似乎不那么优雅(如果我在多个表中使用类型会发生什么?如果我想添加一个类型怎么办?我必须修改这个表!),如果我要处理大量数据(我的测试是用少量的数据,但我没有服务器,只有一个非常简陋的笔记本),那么性能上的好处可能是值得的。
有关详细信息,请参阅他的文章。你同意吗?
https://stackoverflow.com/questions/766299
复制相似问题