使用字符串或int作为列值之间的权衡

时间:2013-10-17 02:57:43

标签: mysql string int row sql-types

我正在创建一个数据库表,其中一列是type。这是存储在此行中的类型。

由于这个软件是开源的,我必须考虑其他人使用它。我可以使用int,理论上它可以更小,可以保存在数据库中,也可以更快地查找,但是我必须有一些文档,这会让我的用户更加困惑。另一种选择是使用string,它占用更多空间并且查找速度较慢。

假设这个表每天会处理数千行,如果我选择了错误的数据类型,它可以快速达到不可扩展的程度。

在这种情况下,当数据库中可能存在数百万行时,是否始终使用int

1 个答案:

答案 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将只是抛出一个错误,如果它确实存在,那么它将使用整数等价而不显示它。这提供了速度和可读性。