我应该使用数字数据格式的精度吗?我知道它确保了可移植性,但使用精度的其他优点是什么?它对索引有影响吗?
答案 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
如您所见,声明的精度和比例对数字盘占用的空间没有任何影响。