这次学习Oracle的批量绑定的概念。

批量绑定是从Oracle9i开始新增加的特性,通过批量绑定,可以极大的加快数据处理速度。提高应用程序的性能。

先建立DEMO表。

CREATE TABLE demo(
id NUMBER(6) PRIMARY KEY,
name VARCHAR2(10)
);

下面以不使用批量绑定和使用批量绑定为例来比较两种方法插入数据的速度。

1,不使用批量绑定

在9i之前,当使用VALUES子句插入数据的时候,每次只能插入一条数据,如果要插入5000条数据,就需要调用5000次INSERT语句。使用循环插入数据。

DECLARE
TYPE id_table_type IS TABLE OF NUMBER(6)
INDEX BY BINARY_INTEGER;
TYPE name_table_type IS TABLE OF VARCHAR2(10)
INDEX BY BINARY_INTEGER;
id_table id_table_type;
name_table name_table_type;
start_time NUMBER(10);
end_time NUMBER(10);
BEGIN
FOR i IN 1..5000 LOOP
id_table(i):=i;
name_table(i):='Name'to_char(i);
END LOOP;
start_time:=dbms_utility.get_time;
FOR i IN 1..id_table.COUNT LOOP
INSERT INTO demo VALUES(id_table(i),name_table(i));
END LOOP;
end_time:=dbms_utility.get_time;
dbms_output.put_line('总计时间(秒):'
to_char((end_time-start_time)/100));
END;
/
总计时间(秒):6.41

2,使用批量绑定

在Oracle9i开始,当使用VALUES子句为数据库表插入数据时,通过批量绑定特征,只需要执行一条INSERT一句就可以插入5000行数据。

DECLARE
TYPE id_table_type IS TABLE OF NUMBER(6)
INDEX BY BINARY_INTEGER;
TYPE name_table_type IS TABLE OF VARCHAR2(10)
INDEX BY BINARY_INTEGER;
id_table id_table_type;
name_table name_table_type;
start_time NUMBER(10);
end_time NUMBER(10);
BEGIN
FOR i IN 1..5000 LOOP
id_table(i):=i;
name_table(i):='Name'to_char(i);
END LOOP;
start_time:=dbms_utility.get_time;
FORALL i IN 1..id_table.COUNT
INSERT INTO demo VALUES(id_table(i),name_table(i));
end_time:=dbms_utility.get_time;
dbms_output.put_line('总计时间(秒):'
to_char((end_time-start_time)/100));
END;
/
总计时间(秒):.33

看看执行的速度结果,结论自然就出来了。

0 评论

发表评论

订阅: 博文评论 (Atom)