原文链接:https://www.gbase.cn/community/post/4333
更多精彩内容尽在南大通用GBase技术社区,南大通用致力于成为用户最信赖的数据库产品供应商。
在数据库管理中,数据导入通常是一个耗时的过程,特别是在处理大量数据时。南大通用GBase 8s数据库提供的表类型——Raw表为数据导入和批量更新提供了优化方案。本文将详细介绍Raw表的概念、优点、使用限制以及实际应用示例,帮助您在数据管理中实现更高效的操作。
Raw表的定义
Raw表,即裸表(raw table)是非日志记录的永久表,类似于非日志记录数据库中的表。支持但不记录裸表中行内的更新、插入和删除操作。可在裸表中定义索引,但是不能在裸表中定义唯一约束、主键约束或引用约束。
Raw表的优点
表DML操作不记录日志,提高数据操作速度。
Raw表的限制
1、不支持(主键、唯一、引用)约束,但支持非空约束;
2、在集群主节点上可用;
3、在集群备节点上不可访问;
4、将裸表改成标准表,需要0级备份;
Raw表的其他注意事项
1、对表的DDL操作(如建索引,修改字段)仍然记录日志;
2、可以创建索引,包含唯一索引;
Raw表使用技巧
如果需要导入的数据过多,可以使用raw表来提升速度。
下面以一个存储过程插入100000条表数据举例:
注:数据库使用版本GBase 8s V8.8_3.5.1
先导入环境变量,可查看每条sql的执行时间
export DBACCESS_SHOW_TIME=1
dbaccess执行以下SQL命令:
drop database if exists test;
create database test with log;
set environment sqlmode 'oracle';
set serveroutput on;
create table test(id int,col1 int);
create or replace procedure insert_test(v_number int) is
begin
for i in 1..v_number loop
insert into test values(i, i);
end loop;
end;
/
call insert_test(100000);
select count(*) from test;
truncate table test;
select count(*) from test;
alter table test type(raw);
call insert_test(100000);
select count(*) from test;
输出结果如下:
> drop database if exists test;
Database dropped.
Elapsed time: 0.016 sec
> create database test with log;
Database created.
Elapsed time: 0.357 sec
> set environment sqlmode 'oracle';
Environment set.
Elapsed time: 0.001 sec
> set serveroutput on;
set serveroutput succeed.
Elapsed time: 0.001 sec
> create table test(id int,col1 int);
Table created.
Elapsed time: 0.003 sec
> create or replace procedure insert_test(v_number int) is
begin
for i in 1..v_number loop
insert into test values(i, i);
end loop;
end;
> /
Routine created.
> call insert_test(100000);
Routine executed.
Elapsed time: 19.166 sec
> select count(*) from test;
(COUNT(*))
100000
1 row(s) retrieved.
Elapsed time: 0.002 sec
> truncate table test;
Table truncated.
Elapsed time: 0.002 sec
> select count(*) from test;
(COUNT(*))
0
1 row(s) retrieved.
Elapsed time: 0.002 sec
> alter table test type(raw);
Table altered.
Elapsed time: 0.002 sec
> call insert_test(100000);
Routine executed.
Elapsed time: 0.509 sec
> select count(*) from test;
(COUNT(*))
100000
1 row(s) retrieved.
Elapsed time: 0.002 sec
可以看出,普通表使用19秒,而raw表仅使用0.5秒。
而后将raw表改为标准表:
alter table test type(standard);
0级备份:
ontape -s -L 0
通过本文的介绍和示例,我们可以看到GBase 8s的Raw表在处理大量数据导入时的优势。它不仅能够提高数据操作的速度,还能在适当的场景下提供灵活的数据管理方案。希望本文能够帮助您更好地利用GBase 8s的Raw表特性,优化您的数据库性能。
原文链接:https://www.gbase.cn/community/post/4333
更多精彩内容尽在南大通用GBase技术社区,南大通用致力于成为用户最信赖的数据库产品供应商。