目录
列存储是以列为单位进行存储的,每一个列的所有数据都存储在一起,而且一个指定的页面中存储的都是某一个列的连续数据。
HUGE表
混合表空间存储 HUGE 表是通过 HFS 存储机制来管理的,它相当于一个文件系统。为混合表空间指定一个 HUGE 数据文件路径,其实就是创建一个空的 HUGE 数据文件目录(系统中有一个默认的混合表空间 MAIN,其 HUGE 数据文件目录名为 HMAIN)。在创建一个 HUGE 表并插入数据时,数据库会在指定的混合表空间的 HUGE 数据文件目录下创建一系列的目录及文件。
列存储的优势
- 同一个列的数据是连续的,可以加快某一个列的查询速度。
- 连续存储的列数据,有更大的数据相似性,有远优于行存储的压缩率。
创建HUGE表
指定 WITH DELTA,创建事务型 HUGE 表;指定 WITHOUT DELTA,则创建非事务型 HUGE 表,缺省为 WITH DELTA。若需要创建非事务型 HUGE 表,在创建数据库时需要将参数 HUGE_WITH_DELTA 和 RLOG_GEN_FOR_HUGE 置为 0。
创建非事务型 HUGE 表 T1
CREATE HUGE TABLE T1 (A INT, B INT) STORAGE(WITHOUT DELTA);
创建事务型 HUGE 表 T2
CREATE HUGE TABLE T2 (A INT, B INT) STORAGE(WITH DELTA);
创建 HUGE 表 test(不记录区统计信息)
CREATE HUGE TABLE test(name VARCHAR, sno INT) STORAGE (STAT NONE);
创建 HUGE 表 test指定表空间
CREATE HUGE TABLE test(name VARCHAR, sno INT) STORAGE (ON TS1);
创建 HUGE 表 test,指定 sno 列按照最大压缩比压缩
CREATE HUGE TABLE test(name VARCHAR, sno INT) COMPRESS LEVEL 1 (sno);
例:
CREATE HUGE TABLE orders
(
o_orderkey INT,
o_custkey INT,
o_orderstatus CHAR(1),
o_totalprice FLOAT,
o_orderdate DATE,
o_orderpriority CHAR(15),
o_clerk CHAR(15),
o_shippriority INT,
o_comment VARCHAR(79) STORAGE(stat none)
)STORAGE(SECTION(65536) , FILESIZE(64), WITH DELTA, ON ts1) COMPRESS LEVEL 9 FOR 'QUERY HIGH' (o_comment);
orders 表的区大小为 65536 行,文件大小为 64M,指定所在的混合表空间为 ts1,o_comment 列指定的区大小为不做统计信息,其它列(默认)都做统计信息,指定列 o_comment 列压缩类型为查询高压缩率,压缩级别为 9。
HUGE表使用
查看HIGE表空间:
select id,name,pathname from v$huge_tablespace;
HUGE 表与普通行表一样,可以进行增、删、改操作,操作方式也是一样的。使用 HUGE 表时应注意存在以下一些限制:
另外,使用 HUGE 表时应注意存在以下一些限制:
- 建 HUGE 表时仅支持定义 NULL、NOT NULL、UNIQUE 约束以及 PRIMARY KEY。后两种约束也可以通过 ALTER TABLE 的方式添加,但这两种约束不检查唯一性,用户需要确保实际数据符合约束,否则相关操作的结果可能不符合预期;
- HUGE 不允许建立聚集索引,允许建立二级索引,不支持建位图索引,其中 UNIQUE 索引不检查唯一性;
- 不支持 SPACE LIMIT(空间限制);
- 不支持建立全文索引;
- 不支持使用自定义类型;
- 不支持引用约束;
- 不支持 IDENTITY 自增列;
- 不支持大字段列;
- 不支持建触发器;
- 不支持游标的修改操作;
- PK 和 UNIQUE 约束不检查唯一性,对应的索引都为虚索引;UNIQUE 索引也不检查唯一性,为实索引,索引标记中不包含唯一性标记,即和普通二级索引相同;
- 不允许对分区子表设置 SECTION 和 WITH/WITHOUT DELTA;
- 当事务型 HUGE 表进行了较多增删改操作时,应对其进行数据重整操作,以提高性能。