【发布时间】:2021-05-12 19:17:22
【问题描述】:
我在 SQL Server 中有一个包含大量数据的表 - 大约 4000 万行。基本结构是这样的:
| Title | type | length | Null distribution |
|---|---|---|---|
| Customer-Id | number | 8 | 60% |
| Card-Serial | number | 5 | 70% |
| - | - | - | - |
| - | - | - | - |
| Note | string-unicode | 2000 | 40% |
两个数字列都由具有特定长度的数字填充。
我不知道要选择哪种数据类型来使数据库具有最小的大小并通过索引customerId 列来获得良好的性能。如果我选择CHAR(8),请参考此Post,即使在空数据中,数据库也会每行消耗8个字节。
我决定使用INT 来减小数据库大小并拥有良好的索引,但空数据将再次使用每行 4 个字节。如果我想减小这个大小,我可以使用VARCHAR(8),但我不知道,系统在这个类型上设置索引是否有很好的性能。主要问题是减少数据库大小很重要或对数字类型有良好的索引。
谢谢。
【问题讨论】:
-
正如 marc 下面所说,最重要的是选择正确的数据类型。
-
从不,永远将数字存储在
varchar列中。每次你这样做时,一只小猫就会死去(并且永远不要使用char开头)。 -
看看稀疏列和页面压缩@a_horse_with_no_name 正确的re号,但长度固定时应该使用
char -
@Charlieface 如果数字的固定长度为 8,则最好使用
INT。 -
@MohammadHajiHosseini 显然,如果它们是数字,您应该永远将它们存储为
char,就像 a_horse_with_no_name 所说的那样。但是如果你有一个固定长度的字母字符串(即它必须是一定的长度),那么一定要使用char,只有在长度可变时才使用varchar。
标签: sql-server database-design sqldatatypes