2016-04-29 52 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 

如您所見,聲明的精度和刻度對數字佔用的磁盤空間沒有任何影響。

相關問題