INFORMIX对临时表加with no log选项后,DML操作不记录日志。 Informix支持创建不记录日志的表,在部分应用模块对性能要求较高的情形下,我们可以考虑采用RAW TABLE来提升DML操作的性能,同时能减少数据库的逻辑日志量。
语法:
create table时指定表的类型:
create raw table tabname();
同时也可以进行修改:
ALTER TABLE tabname TYPE(RAW);
ALTER TABLE tabname TYPE(STANDARD);
语法测试
--创建raw table orders_sum1
create raw table orders_sum1
(
order_date date,
sum_cat char(16),
cat_name varchar(255),
order_counts integer,
ship_charge money(20,2)
) extent size 16 next size 16 lock mode page ;
create unique index idx_orders_sum1 on orders_sum1 (order_date,sum_cat,cat_name) ;
--采用 unique index来替代primary key
--创建标准 table orders_sum2
create table orders_sum2
(
order_date date,
sum_cat char(16),
cat_name varchar(255),
order_counts integer,
ship_charge money(20,2)
) extent size 16 next size 16 lock mode page ;
create unique index idx_orders_sum2 on orders_sum2 (order_date,sum_cat,cat_name) ;
性能测试对比
raw_table.sql 语句如下:
begin work;
insert into orders_sum1 select * from orders_sum;
commit work;
time dbaccess demodb raw_table.sql
Database selected.
Started transaction.
1550237 row(s) inserted.
Data committed.
Database closed.
real 0m26.597s
user 0m0.006s
sys 0m0.005s
stand_table.sql 语句如下:
begin work;
insert into orders_sum2 select * from orders_sum;
commit work;
[informix@localhost demodb]$ time dbaccess demodb stand_table.sql
Database selected.
Started transaction.
1550237 row(s) inserted.
Data committed.
Database closed.
real 1m34.132s
user 0m0.005s
sys 0m0.005s
raw table比正常的表的性能有明显的差异。
但同样会有一些负面影响:
1、不记录日志,则利用逻辑日志来恢复的系统,对raw table无法起作用;
2、对于利用数据库逻辑日志的外部系统则恢复捕获到raw table的逻辑日志;
3、对raw table上不能创建约束