我有一个创建一个可插入一个新的猫以下PL/SQL块中的JDBC声明:转换PLSQL函数来处理,利用一个Oracle ARRAY
CREATE OR REPLACE PROCEDURE INSERT_NEW_CAT(AGE NUMBER, WEIGHT NUMBER, NAME VARCHAR2)
AS
BEGIN
INSERT INTO CATS(cat_id,age,weight,name)
VALUES(cat_id_sequence.nextval,age,weight,name);
END INSERT_NEW_CAT;
而且下面的Java模块批量插入这些猫:
CallableStatement statement = conn.prepareCall("{CALL insert_new_cat(?,?,?)}");
for(int i = 0; i < 50000;i++)
{
statement.setInt(1, i);
statement.setInt(2,i);
statement.setString(3,"Test");
statement.addBatch();
if(i % 16382== 0) //max value my batch can support on my hardware
{
statement.executeBatch();
}
}
statement.executeBatch();
所以这个问题是我只能坚持700记录秒,这是很慢。我相信问题是我每行调用一次上述PL/SQL函数(或者每批次输入一次)。如何重新编写上述函数来获取这些语句的数组,并进行批量插入以将对函数的调用次数减少到N模16382 + 1?数据库是Oracle 10g。
只是一个问题。如果您每100条记录执行一次批处理,而不是在16000条奇数记录之后执行,那么您认为它可能更具性能吗? – sethu 2012-08-17 15:16:38
@sethu我相信对数据库的呼叫越多,性能就会越差,因此不会。也作为供参考性能不是一个字:) – Woot4Moo 2012-08-17 15:27:24
表现最肯定是一个字。而且,我从记忆的角度来看更多。内存将被保留,直到您执行批处理。这可能会降低系统的速度。您可能需要尝试并获得正确的批量大小。 – sethu 2012-08-18 08:37:52