2016-04-29 3 views
-1

数値データ形式に精度を使用する必要がありますか?私はそれが移植性を保証しますが、精度を使用することの他の利点は何ですか?インデックスに影響しますか?ORACLEでNUMBERデータ形式の精度を使用する利点は何ですか?

+0

この種の質問は広すぎると思います。 – Aleksej

+1

利点は、必要に応じて小数点以下を格納できることです。 –

+0

@a_horse_with_no_name、私の友人の1人は、それがインデックスをスピードアップすると言いました。本当ですか? –

答えて

1

メリットがドキュメントで詳細に説明されています
https://docs.oracle.com/cd/B28359_01/server.111/b28318/datatype.htm#i16209

あなたが数値フィールドを指定すると、 精度とスケールを指定することをお勧めします。
入力時に完全な整合性チェックが行われます。


精度と数値のスケールないインデックスへの影響、ストレージとクエリの速度を有しています。
カラムの値のサイズは、インデックスサイズとその速度に影響しません。

しかし、誰も知っていることはほとんどありません。つまり、ディスク上の数字はに固定幅witdth形式ではなく、さまざまな幅で格納されています。

それはバイト単位でディスク上の価値の大きさを与えるvsize機能の助けを借りてチェックすることができます。

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 
:ここ
https://docs.oracle.com/cd/B19306_01/server.102/b14200/functions213.htm

は簡単な実験であります

現在:

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 

ご覧のように、宣言された精度と位取りは、ディスクに占有されているスペースには何の影響もありません。

関連する問題