【发布时间】:2018-10-10 15:52:20
【问题描述】:
我有一个包含记录的表(可能很少,也可能很多),在某种情况下,我需要通过可以是十进制或整数的参数对该表进行查询,例如
select * from Table1 inner join Table2 on...
where Table1.Field <= @Number
我可以选择“字段”为十进制或整数。 Decimal 对于我正在实现的算法更好,但我也可以使用 Integer 所以......比较使用 Decimal 类型与 Integer 类型的查询效率有多低?不要紧?慢两倍?慢十倍?
谢谢
【问题讨论】:
-
请确保
field和@Number具有相同的类型。 -
我无法想象,在现代系统中,与影响事务时间的其他方面相比,数值比较的性能差异会非常显着。如果您担心,您可以随时在样本数据集上尝试每种方法并进行测量。
-
检查this article。根据场景的不同,小型结果集的速度会慢几%,或者大型结果集的速度可能会慢两到三倍。还使用大约两倍的存储空间。正如@lurker 所说,事务的其他部分很可能会对性能产生更大的影响。
-
@JacobH:“两倍的存储”对于 Oracle 来说是不正确的。 Oracle 的
number数据类型是一种可变长度数据类型,它只使用所需的空间。所以存储1比存储98765432需要更少的空间。 Oracle 也不区分“整数”或“小数” - 两者都是具有不同约束的NUMBER数据类型,因此最终它始终是NUMBER与NUMBER相比 -
@carlosTI:您指的是哪些类型?
NUMBER与例如NUMBER(18,2)?因为在 Oracle 中,integer只是NUMBER的别名,而decimal(x,y)只是number(x,y)的别名
标签: sql oracle performance sqldatatypes