【问题标题】:In DB, Is inefficient to compare with a Decimal field instead of an Integer? How much?在 DB 中,与 Decimal 字段而不是 Integer 进行比较效率低吗?多少钱?
【发布时间】: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 数据类型,因此最终它始终是 NUMBERNUMBER 相比
  • @carlosTI:您指的是哪些类型? NUMBER 与例如NUMBER(18,2)?因为在 Oracle 中,integer 只是NUMBER 的别名,而decimal(x,y) 只是number(x,y) 的别名

标签: sql oracle performance sqldatatypes


【解决方案1】:

差异可以忽略不计。使用最能代表您遇到的问题并正确解决问题的类型。

如果您在 30 年前(没有数学协处理器)问过这样的问题,答案可能会有所不同,但现在不会了。

【讨论】:

    猜你喜欢
    • 2016-11-10
    • 1970-01-01
    • 2021-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-22
    相关资源
    最近更新 更多