我正在创建一个数据库表,其中一列是type
。这是存储在此行中的类型。
由于这个软件是开源的,我必须考虑其他人使用它。我可以使用int
,理论上它可以更小,可以保存在数据库中,也可以更快地查找,但是我必须有一些文档,这会让我的用户更加困惑。另一种选择是使用string
,它占用更多空间并且查找速度较慢。
假设这个表每天会处理数千行,如果我选择了错误的数据类型,它可以快速达到不可扩展的程度。
在这种情况下,当数据库中可能存在数百万行时,是否始终使用int
?
答案 0 :(得分:0)
你是对的,INT
更快,因此是更好的选择。
如果您担心未来的开发人员,请在解释每个值的列中添加注释。如果有很多值,可以考虑使用查找表,这样你就可以要求输入一个字符串,得到它的数字ID(像常量一样)然后查找它。
喜欢这个
id | id_name
---|------------
1 | TYPE_ALPHA
2 | TYPE_BETA
3 | TYPE_DELTA
现在你有一个ID的字面解释。只需收集ID(WHERE id_name = 'TYPE_ALPHA'
),然后使用它来过滤您的表格。
然而,这两种解决方案的一个幸福媒介可能是使用ENUM
数据类型。 Documentation here。
如果我对ENUM的理解是正确的,它会在比较期间将字段视为字符串,但将实际数据存储为数字整数。当你查找一个字符串,并且它没有在表模式中定义时,MySQL将只是抛出一个错误,如果它确实存在,那么它将使用整数等价而不显示它。这提供了速度和可读性。