如果您使用表压缩,仅存储日期可能会节省空间。
这是一个示例,显示仅存储日期可以减小段大小:
create table a (dt date) compress;
create table b (dt date) compress;
--Insert 20 million rows, with time
begin
for i in 1 .. 20 loop
insert /*+ append */ into a
select sysdate + numToDSInterval(level, 'second')
from dual connect by level <= 1000000;
commit;
end loop;
end;
/
--Insert 20 million rows, date only
begin
for i in 1 .. 20 loop
insert /*+ append */ into b
select trunc(sysdate + numToDSInterval(level, 'second'))
from dual connect by level <= 1000000;
commit;
end loop;
end;
/
select segment_name, bytes/1024/1024 MB
from dba_segments
where segment_name in ('A', 'B')
order by segment_name;
SEGMENT_NAME MB
------------ --
A 256
B 224
Oracle 基本表压缩仅压缩整个值,如果不同的值较少,则压缩可以更好地工作。但永远不要完全相信任何压缩演示——您需要在自己的数据上进行尝试才能确定。这可能是最好的情况,压缩可能根本不会帮助您的数据。
表压缩有很多缺点 - 它需要企业版,DML 速度较慢,您无法向表中添加列等。
此外,正如 Ben 所建议的,您应该使用检查约束而不是触发器来强制执行仅日期规则。它将更简单、更快,并且不会阻止直接路径写入,这是使用基本表压缩所必需的。