我将字段定义为integer
,其他字段定义为numeric (8,4)
,而第一个字段为smallint
,第二个字段为numeric (3,4)
,所以我就是只是想知道我是否更改或减少了这些字段的数据类型限制会对数据库空间或性能产生任何影响吗?
答案 0 :(得分:0)
NUMERIC(3,4)
是不可能的(比例必须介于0和精度之间)。内部Firebird使用SMALLINT
,INTEGER
或BIGINT
来NUMERIC
和DECIMAL
。对于最多4的精度,它使用SMALLINT
(INTEGER
DECIMAL
),5到9使用INTEGER
,10到18使用BIGINT
。 SMALLINT
小于INTEGER
(2个字节对4个字节),因此存储空间可能会减少。
现在,如果这实际上节省了存储空间或提高了性能,那么有点难以辨别; Firebird对存储的记录应用了一种运行长度编码形式,并在索引中应用了前缀压缩。这使得对它做出明确陈述变得更加困难,尽管我希望选择SMALLINT
(和NUMERIC
,其缩放< = 4)来实际节省一些空间。当然,记录的解压缩内存图像会更小。
与性能一样(以及这种情况:存储):您需要使用真实(或良好的近似)数据进行非平凡的测试。您还应该问自己,这对您的具体应用和使用是否真正重要。您可以花费大量时间来优化(或测试)不重要或相关的内容。
选择较小数据类型的另一个原因是Firebird记录的大小有限(总共64千字节,其中blob每个只计算8个字节),使用较小的类型可能意味着有额外的列空间。
然而 - 恕我直言 - 选择较小数据类型的最终原因应该是您不需要更大的类型,并且您希望在数据类型的选择中表达该限制。