为 SQL 服务器中的数字列选择最佳数据类型

Choosing best datatype for numeric column in SQL Server

我在 SQL 服务器中有一个 table 有大量数据——大约 4000 万行。基本结构是这样的:

Title type length Null distribution
Customer-Id number 8 60%
Card-Serial number 5 70%
- - - -
- - - -
Note string-unicode 2000 40%

两个数字列均由特定长度的数字填充。

我不知道选择哪种数据类型才能使数据库的大小最小,并通过索引 customerId 列获得良好的性能。参考这个Post如果我选择CHAR(8),数据库每行消耗8字节,即使是空数据。

我决定使用 INT 来减小数据库大小并获得良好的索引,但空数据将再次每行使用 4 个字节。如果我想减少这个大小,我可以使用VARCHAR(8),但我不知道,系统是否对这种类型设置索引有很好的性能。主要问题是减小数据库大小很重要或在数字类型上具有良好的索引。

谢谢。

如果它是一个数字 - 那么一定要选择一个数字数据类型! !不要将您的号码存储为 char(n)varchar(n) !!那只会让你日后感到无比的悲伤和头痛。

选择很明确:

  • 如果您有 全部 个数字 - 使用 TINYINTSMALLINTINTBIGINT - 取决于您需要的号码范围

  • 如果您需要 分数 数字 - 使用 DECIMAL(p,s) 以获得最佳和最稳健的行为(没有像 FLOATREAL)

选择最合适的数据类型比存储的任何微优化都重要得多。即使有 4000 万行——无论您使用 4 字节还是 8 字节,这仍然不是大问题。无论您使用 数字 类型还是字符串类型 - 这都会在数据库的可用性和处理方面造成 巨大差异