【发布时间】:2016-03-23 16:59:51
【问题描述】:
在当前数据库中,我有一个带有 NUBMER(16) 的列,但是由于事务大小增加到 17 个字符,我计划将其设置为支持 32 个字符数字的 NUMBER。
在大小和性能方面,我想知道它对数据库有何影响?
【问题讨论】:
标签: oracle numbers sqldatatypes
在当前数据库中,我有一个带有 NUBMER(16) 的列,但是由于事务大小增加到 17 个字符,我计划将其设置为支持 32 个字符数字的 NUMBER。
在大小和性能方面,我想知道它对数据库有何影响?
【问题讨论】:
标签: oracle numbers sqldatatypes
Oracle 数据库以可变长度格式存储数值数据。每个 值以科学计数形式存储,1 个字节用于存储 指数。数据库最多使用 20 个字节来存储尾数, 这是包含其的浮点数的一部分 有效数字。 Oracle 数据库不存储前导和 尾随零。
因此,存储将取决于实际数值,而不仅仅是精度。
精度是有效位数。
要查看存储,请使用vsize 和dump。
例如,
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.
【讨论】: