VARCHAR与DECIMAL表现

时间:2015-06-09 17:33:30

标签: sql-server

我们的数据库是SQL Server 2008.出于某种原因,DBA(现在已经不见了)制作了我们所有的主键DECIMAL(38,0)。这些列未指定为标识列 - 相反,应用程序代码中有一个公式为列生成唯一标识符(随机数)。

我们显然不会在短时间内将38位数字作为我们数据的主键。实际上,这个概念很好。该数字应该是统计随机的(如果不是更随机),而不是uniqueidentifer类型,我们只是没有应用程序代码生成数字的便利。

我的问题是:如果我要将这些DECIMAL(38,0)列转换为VARCHAR(38),那么索引大小,索引速度,数据检索速度,存储要求等方面是否有任何优势......?我们不需要对这些列进行任何数学运算,因此将它们设为DECIMAL(38,0)似乎是一种浪费。

我更像是一名应用程序开发人员,而不是DBA,所以请原谅我,如果这听起来像一个无知的问题。

1 个答案:

答案 0 :(得分:1)

简答:不。

您不太可能看到任何存储改进。 decimal(38,0)每个需要17个字节。 varchar(38)最多可占用40个字节(实际数据长度为+ 2 bytes overhead)。性能更难衡量,但现代CPU上的FPGA用于计算浮点数,因此我自然希望decimal有很大的提升。

最后一件事:

  

该数字应该与uniqueidentifer类型

一样具有统计随机性(如果不是更随机)

大多数随机数生成器都是伪随机数。他们没事,但不是很好。如果您的应用程序因随机数的质量而死或死,请尝试使用加密级随机数生成器。