INFORMIX raw table--无日志表

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上不能创建约束

 

 

你可能感兴趣的:(数据库开发)