在ORACLE中使用NUMBER数据格式的精度有什么好处?

时间:2016-04-29 13:13:07

标签: oracle sqldatatypes

我应该使用数字数据格式的精度吗?我知道它确保了可移植性,但使用精度的其他优点是什么?它对索引有影响吗?

1 个答案:

答案 0 :(得分:1)

文档中详细解释了优点:
https://docs.oracle.com/cd/B28359_01/server.111/b28318/datatype.htm#i16209

  

指定数字字段时,最好指定   精度和规模。
  这为输入提供了额外的完整性检查。

数字的精确度和比例对索引,存储和查询速度没有任何影响
列中值的大小可能会影响索引大小及其速度。

但几乎没有人知道,Oracle在磁盘上以宽度变化的方式存储数字 - 而不是固定的格式。

可以在vsize函数的帮助下进行检查,该函数以字节为单位给出磁盘上的值大小:
https://docs.oracle.com/cd/B19306_01/server.102/b14200/functions213.htm

这是一个简单的实验:

create table my_numbers(
  my_number number
);

insert into my_numbers values(1);
insert into my_numbers values(9);
insert into my_numbers values(99);
insert into my_numbers values(999);
insert into my_numbers values(9999);
insert into my_numbers values(99999);
insert into my_numbers values(999999);
commit;

select my_number, vsize( my_number)
from my_numbers;

MY_NUMBER                        VSIZE(MY_NUMBER)
---------- ---------------------------------------
         1                                       2
         9                                       2
        99                                       2
       999                                       3
      9999                                       3
     99999                                       4
    999999                                       4

现在:

UPDATE my_numbers set my_number = my_number + 1;
commit;
select my_number, vsize( my_number)
from my_numbers;
MY_NUMBER                        VSIZE(MY_NUMBER)
---------- ---------------------------------------
         2                                       2
        10                                       2
       100                                       2
      1000                                       2
     10000                                       2
    100000                                       2
   1000000                                       2

如您所见,声明的精度和比例对数字盘占用的空间没有任何影响。