【问题标题】:Difference between NUMBER & NUMBER(16) in oracle?oracle中的NUMBER和NUMBER(16)之间的区别?
【发布时间】:2016-03-23 16:59:51
【问题描述】:

在当前数据库中,我有一个带有 NUBMER(16) 的列,但是由于事务大小增加到 17 个字符,我计划将其设置为支持 32 个字符数字的 NUMBER。

在大小和性能方面,我想知道它对数据库有何影响?

【问题讨论】:

    标签: oracle numbers sqldatatypes


    【解决方案1】:

    来自Oracle documentation

    Oracle 数据库以可变长度格式存储数值数据。每个 值以科学计数形式存储,1 个字节用于存储 指数。数据库最多使用 20 个字节来存储尾数, 这是包含其的浮点数的一部分 有效数字。 Oracle 数据库不存储前导和 尾随零。

    因此,存储将取决于实际数值,而不仅仅是精度

    精度是有效位数。

    要查看存储,请使用vsizedump

    例如,

    SQL> CREATE TABLE t (val NUMBER(16));
    
    Table created.
    
    SQL> INSERT INTO t VALUES (-12);
    
    1 row created.
    
    SQL> INSERT INTO t VALUES (1);
    
    1 row created.
    
    SQL> INSERT INTO t VALUES (12);
    
    1 row created.
    
    SQL> INSERT INTO t VALUES (1234);
    
    1 row created.
    
    SQL> INSERT INTO t VALUES (12345);
    
    1 row created.
    
    SQL> INSERT INTO t VALUES (123456789012345);
    
    1 row created.
    
    SQL> COMMIT;
    
    Commit complete.
    

    让我们检查一下尺寸:

    SQL> SELECT val, vsize(val), dump(val) FROM t ORDER BY val DESC;
    
                 VAL       VSIZE(VAL) DUMP(VAL)
    ---------------- ---------------- --------------------------------------
     123456789012345                9 Typ=2 Len=9: 200,2,24,46,68,90,2,24,46
               12345                4 Typ=2 Len=4: 195,2,24,46
                1234                3 Typ=2 Len=3: 194,13,35
                  12                2 Typ=2 Len=2: 193,13
                   1                2 Typ=2 Len=2: 193,2
                 -12                3 Typ=2 Len=3: 62,89,102
    
    6 rows selected.
    

    【讨论】:

    • 感谢拉利特的回答。因此,如果我使用 NUMBER 而不是 NUMBER(17) 如果我的号码是 17 个字符,它不会占用任何额外的存储空间吗?
    • 是的,这正是我所说的。您可以像我在答案中所做的那样进行比较。
    猜你喜欢
    • 1970-01-01
    • 2022-06-14
    • 2017-04-21
    • 2011-01-23
    • 2018-06-03
    • 2011-02-15
    • 2012-10-08
    • 2019-06-22
    • 2015-03-28
    相关资源
    最近更新 更多