数据库数据类型性能:int或string

时间:2011-01-18 18:48:31

标签: asp.net sql sql-server

我正在存储手机国家代码。它们的范围从1到大约300.数据类型的性能会更高:int还是string?我正在使用SQL Server 2008和linq-to-sql。

感谢。

7 个答案:

答案 0 :(得分:3)

注意: 哇,真的很奇怪 - 你问过电话代码,我写了一些邮政编码。对于那个很抱歉!我认为这个建议仍然存在......


原始答案:性能最有可能忽略不计 - 根据数据分配正确的类型。邮政编码虽然是数字(至少在美国),但不是数字 - 它们应该存储为字符串。

了解所存储数据的语义性质非常重要。一旦你理解了什么是什么,你就可以开始推理它应该如何存储。我假设您目前只存储美国邮政编码的前5个数字(例如:12345)。

如果您要将此数据存储为数字,这将起作用。然后想象一下,您的经理告诉您,您正在构建的应用程序将开始收集ZIP+4 format中的邮政编码(如下所示:12345-6789)。现在你陷入了一个讨厌的重构,它涉及将数据库中的类型更改为varchar(10)或者在应用程序中做一些疯狂的伏都教,以便在保存邮政编码时删除短划线,然后将其重新添加进行显示后面。

答案 1 :(得分:2)

如果您真的担心空间和性能,那么您可以使用smallint(相当于int16)。这意味着数据只需要2个字节的存储空间(以及2个字节的存储空间)。

答案 2 :(得分:1)

给定一个选项,我知道数据类型将始终是整数,我会选择整数虽然更小的尺寸 - smallint / tinyint(取决于所需的范围)。

我不希望性能有太大差异。

答案 3 :(得分:1)

你将如何使用它们并且有任何前导零?

如果您要将通常存储为字符串的电话号码组合在一起,您也希望将它们存储为字符串,否则您将浪费处理能力在每次查询中转换它们。

如果您不打算进行数学运算或加入数学运算,那么将数字存储起来可能是一个坏主意。你的数据集可能很小,字符串很小(300是最大值),使用int可能会在连接中获得任何东西。

答案 4 :(得分:1)

国家/地区代码是字符串(尽管它们只使用字符0..9),并且应该这样存储。

答案 5 :(得分:0)

它们很少,您不需要担心这一点,尽管使用整数类型应用检查约束会更简单。

答案 6 :(得分:0)

我的经验法则一直是......我需要一个平均值吗?例如,您可以将邮政编码存储为整数,但是您是否需要平均邮政编码?可能不是。因此,存储为char ..除非您可能需要超过5个字符,在这种情况下存储为varchar。