WEB开发网
开发学院数据库DB2 DB2数据库中提高INSERT性能详解 阅读

DB2数据库中提高INSERT性能详解

 2007-05-20 16:20:09 来源:WEB开发网   
核心提示: 从游标装载这种方法可用于应用程序的程序代码(通过 db2Load API),或用于 DB2 脚本,DB2数据库中提高INSERT性能详解(2),下面是后一种情况的一个例子:declare staffcursor cursor forselect * from staff;load from

从游标装载

这种方法可用于应用程序的程序代码(通过 db2Load API),或用于 DB2 脚本。下面是后一种情况的一个例子:

declare staffcursor cursor forselect * from staff;
load from staffcursor of cursor insert into myschema.new_staff;

这两行可以用下面一行替代:

insert into myschema.new_staff select * from staff

同等效的 INSERT ... SELECT 语句相比,从游标装载几乎可以提高 20% 的性能。

从 CLI 装载

这种方法显然只限于调用层接口(CLI)应用程序,但是它非常快。这种技巧非常类似于数组插入,DB2 附带了这样的示例,使用 load 时的速度是使用经过完全优化的数组插入时的两倍,几乎要比未经优化的数组插入快 10 倍。

所有INSERT可以改进的地方

让我们看看插入处理的一些必要步骤,以及我们可以用来优化这些步骤的技巧。

1. 语句准备

作为一条 SQL 语句,INSERT 语句在执行之前必须由 DB2 进行编译。这一步骤可以自动发生(例如在 CLP 中,或者在一次 CLI SQLExecDirect 调用中),也可以显式地进行(例如,通过一条 SQL Prepare、CLI SQLPrepare 或 JDBC prepareStatement 语句)。该编译过程牵涉到授权检查、优化,以及将语句转化为可执行格式时所需的其他一些活动。在编译语句时,语句的访问计划被存储在包缓存中。

如果重复地执行相同的 INSERT 语句,则该语句的访问计划(通常)会进入到包缓存中,这样就免除了编译的开销。然而,如果 insert 语句对于每一行有不同的值,那么每一条语句都将被看成是惟一的,必须单独地进行编译。因此,将像下面这样的重复语句:

insert into mytable values (1, 'abc')
insert into mytable values (2, 'def')

上一页  1 2 3 4 5 6 7  下一页

Tags:DB 数据库 提高

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接