|
本帖最后由 htyro 于 2012-5-30 17:36 编辑
CREATE VERTICAL TABLE t1
(
"SEX" INT,
id int,
"NAME" VARCHAR2(30),
c1 date DEFAULT sysdate,
c2 date DEFAULT sysdate,
c3 date DEFAULT sysdate,
c4 date DEFAULT sysdate,
c5 date DEFAULT sysdate,
c6 date DEFAULT sysdate,
c7 date DEFAULT sysdate
) COMPRESS ;
[执行语句1]:
declare
p int;
begin
for i in 1 .. 100000
loop
p:=mod(i,2);
insert into t1 (SEX,id,name) values(p,i,to_char(i)||'aaa');
end loop;
commit;
end;
执行成功, 耗时1分9秒314毫秒. 执行号:22
影响了1条记录
1条语句执行成功
select * from t1 where sex=1;
#NSET2: [6, 2500, 0]
#PRJT2: [6, 2500, 0]; exp_num(11), is_atom(FALSE)
#VLKUP: [6, 2500, 0]; INDEX33555442(T1)
#SLCT2: [6, 2500, 0]; T1.SEX = 1
#VSEK2: [6, 2500, 0]; scan_type(E); INDEX33555442(T1)
-------------------------------------------------------------------------------------
CREATE TABLE t2
(
"SEX" INT,
id int,
"NAME" VARCHAR2(30),
c1 date DEFAULT sysdate,
c2 date DEFAULT sysdate,
c3 date DEFAULT sysdate,
c4 date DEFAULT sysdate,
c5 date DEFAULT sysdate,
c6 date DEFAULT sysdate,
c7 date DEFAULT sysdate
);
[执行语句1]:
declare
p int;
begin
for i in 1 .. 100000
loop
p:=mod(i,2);
insert into t2 (SEX,id,name) values(p,i,to_char(i)||'aaa');
end loop;
commit;
end;
执行成功, 耗时3秒353毫秒. 执行号:23
影响了1条记录
1条语句执行成功
select * from t2 where sex=1;
#NSET2: [46, 2500, 0]
#PRJT2: [46, 2500, 0]; exp_num(11), is_atom(FALSE)
#SLCT2: [46, 2500, 0]; T2.SEX = 1
#CSCN2: [46, 100000, 0]; INDEX33555443(T2)
简单做了列存的测试,结果如上。
在批量插入数据方面,以10万条数据为例,列存表比普通表要慢将近30倍,这个跟列存表的存放方式有很大关系。
不过在查询方面,以语句select * from t2 where sex=1 为例,列存表的COST为6,而普通表的COST为46,大概是1/8,提升还是很不错的。
晚点用这个来跑TPCH的22个查询语句试试。 |
|