在11.2中,Oracle新增了延迟段创建的特性。
任何一个数据库中,都难免会存在一些空表,如果设计的不好,很可能数据库中存在大量没有数据的表。而11.2中,Oracle推出的一个新特性,可以避免大量的空表占用空间,这就是段延迟创建。
SQL> select * from v$version;
BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
PL/SQL Release 11.2.0.1.0 - Production
CORE 11.2.0.1.0 Production
TNS for Linux: Version 11.2.0.1.0 - Production
NLSRTL Version 11.2.0.1.0 - Production
SQL> create table t_segment_immediate (id number)
2 segment creation immediate;
表已创建。
SQL> create table t_segment_deferred (id number)
2 segment creation deferred;
表已创建。
SQL> create table t_segment_default (id number);
表已创建。
SQL> select segment_name
2 from user_segments
3 where segment_name like 'T_SEGMENT%';
SEGMENT_NAME
---------------------------------------------------------------------------------
T_SEGMENT_IMMEDIATE
可以看到,三个表创建后,只有SEGMENT CREATION IMMEDIATE的表包含了段信息,而其他两个表并没有创建段。
Oracle不但新增了段延迟的特性,而且将这个特性设置为默认方式,也就是说,用户不需要在建表的时候指定任何的设置,就自动拥有了段延迟创建带来的优点。
当第一条记录插入到表中时,数据段被建立:
SQL> insert into t_segment_deferred values (1);
已创建1行。
SQL> insert into t_segment_default values (1);
已创建1行。
SQL> select segment_name
2 from user_segments
3 where segment_name like 'T_SEGMENT%';
SEGMENT_NAME
---------------------------------------------------------------------------------
T_SEGMENT_DEFAULT
T_SEGMENT_DEFERRED
T_SEGMENT_IMMEDIATE