我的项目有很多主数据(例如:状态,区域设置,设备等)。要存储主数据,我看到以下选项
最好的方法是什么。如果有其他好的选择,请建议。
答案 0 :(得分:0)
好的,讨论ENUM的优点(和缺点)......
<强> ENUM 强>
ENUM
列可以是NULL或NOT NULL。如果你使它NULLable
,需要额外的一点(其他地方)来保持它
信息。你需要考虑“NULL”在你的意思中应该是什么意思
应用程序。相反,我建议使用NOT NULL
并使第一个选项成为NULL
所指的任何内容。WHERE my_enum = 'something'
不太可能在my_enum上使用索引,除非
'某事'发生在不到10-30%的行中。 (我不能给你
一个确切的数字 - 优化器有自己的想法。交换
从使用索引到进行表扫描通常是“正确的
事情“当索引值'太'常见时。)<强> VARCHAR 强>
VARCHAR(77)
的abcde
占用1 + 5个字节 - 长度为1,实际字符为5。 (ETC)查找表
AUTO_INCREMENT
和VARCHAR
的2列表格。JOIN
从ID中获取字符串。id
可能是1字节TINYINT UNSIGNED
(值0..255),因此它与ENUM
一样紧凑。SMALLINT UNSIGNED
(0..65535)。INSERT IGNORE
- 它可能会烧掉AUTO_INCREMENT
个ID,并且很快会超过255个。<强>评论强>
JOIN
)。VARCHAR
是磁盘空间中成本最高的。JOIN
,额外表格的情况会非常昂贵。有了这些优点和缺点,你决定。没有“最好的方法”。