在我的 user_accounts
表中,我有一个名为 source
的字段,它是一个 ENUM
。它表明用户是如何被推荐到该网站的。可能的值是通过 Facebook、通过电子邮件或通过常规网站注册。
对于如何将这些值存储在数据库中,有 3 种可能的选择:
作为一个完整的字符串,即
facebook, email , website
作为 1 个字母的代码,例如
F, E, W
作为 1 数字代码,例如
1, 2, 3
从数据库性能/维护的角度来看,哪种方法是最好的方法?如果我将值存储为 1 个字母/数字代码而不是完整字符串,是否会有任何影响(例如更快的查询)?此列将在 WHERE
语句中使用。
最佳答案
在性能方面,ENUMS 确实倾向于最优化(因为系统知道可能的值集,它在搜索等方面使用不同的算法)。您可以使用 ENUMS('FACEBOOK' 等)存储完整的字符串,它们每行仅占用 1 个字节的空间! (提供总共少于 256 个枚举)。但是,仅当您确定 F、E、W 是您将看到的唯一选项时才使用枚举。添加新的 ENUMS 很痛苦,因为您必须更改表以更新枚举值,并且必须确保枚举顺序。
紧随其后的是数字。问题是可读性。您可能最终不得不保留另一个表格来理解每个数字代表什么。 (要么在数据库中,要么在应用程序中)
就查询速度而言,Varchar 是最差的,但可读性和可管理性最高。
关于mysql - 在数据库中使用 1 位代码 VS ENUM 的描述性字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6098569/