SQL索引 - char和int之间的差异

时间:2011-02-28 12:04:44

标签: sql-server-2005 indexing primary-key numeric

我有一个关于Sql Server 2005数据库的表。 表的主键字段是代码编号。

作为标准,代码必须包含4位数字。例如:1234,7834,......

在有效选择操作方面,您是否建议字段类型为char(4)或int或numeric(4)。 对任何类型的表进行索引会与其他类型不同吗?

4 个答案:

答案 0 :(得分:1)

我提倡SMALLINT专栏。只是因为它是最合理的数据类型,适合所需的范围(最多65535,超过4位)。使用检查约束强制执行4位数限制,使用COMPUTED列返回char(4)列。

答案 1 :(得分:1)

由于多种原因,整数/标识列通常用于数据库表中的主键。主键列必须是唯一的,不应该是可更新的,并且实际上应该没有意义。这使得标识列成为一个非常好的选择,因为服务器将为您获取下一个值,它们必须是唯一的,并且整数相对较小且可用(与GUID相比)。

一些数据库架构师会争辩说其他数据类型应该用于主键值,并且双方都可以令人信服地论证“无意义”和“不可更新”的标准。无论如何,整数/标识字段非常方便,许多数据库设计者发现它们为引用完整性提供了合适的键值。

  1. 主键的最佳选择是整数数据类型,因为整数值的处理速度比字符数据类型值快。在处理之前,需要将字符数据类型(作为主键)转换为ASCII等效值。
  2. 在整数作为主键的情况下,基于主键获取记录将更快,因为这将意味着在单个页面上将存在更多索引记录。所以总搜索时间减少了。连接也会更快。但这将适用于您的查询使用聚簇索引搜索而不扫描,如果只使用一个表。如果扫描没有额外的列将意味着一个数据页上的更多行。
  3. 希望这会对你有帮助!

答案 2 :(得分:0)

如果我没记错的话,整数占用的内存少于字符,所以你应该选择int。 这两个链接说的相同:
http://www.eggheadcafe.com/software/aspnet/31759030/varcharschars-vs-intbigint-as-keys.aspx
http://sql-server-performance.com/Community/forums/p/16020/94489.aspx

答案 3 :(得分:0)

“这取决于”

  • this 的情况下,char(4)捕获正确存储的数据,没有存储开销(每个4个字节)。 0001当然与1不同。

  • 如果你有非数字数字,你确实有一些处理校对等的开销,但对于合理大小的数据库来说无关紧要。使用4位数代码,您可以获得行数的上限,尤其是数字(10k)。

  • 如果新代码没有严格增加,则会出现与GUID群集密钥相关联的页面拆分问题

  • 如果它们严格增加,则使用int并添加计算列以添加前导零