2016-04-29 87 views
-1

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

+0

我相信这样的问题对于SO – Aleksej

+1

来说过于宽泛如果需要的话,您可以存储小数点。 –

+0

@a_horse_with_no_name,我的一位朋友说它加快了ups索引。这是真的吗? –

回答

1

优势进行了详细的说明文档中:
https://docs.oracle.com/cd/B28359_01/server.111/b28318/datatype.htm#i16209

当你指定数字字段,它是指定 精度和规模是一个好主意。
这提供了额外的输入完整性检查。


精度和数字的规模有没有对指数造成任何影响,存储和查询的速度。
列中值的大小可能会影响索引大小和速度。

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

它可以与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 

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

相关问题