在单个事务中插入多行时,Oracle查询性能会下降

时间:2013-03-21 10:52:19

标签: sql performance oracle

在单个事务中,我将行插入到表中,在插入行之前,我执行查询以查看是否已存在包含我要插入的键的行。

我看到检查密钥存在的查询在我的事务中变得非常慢,但是从另一个事务中它很快,并且在下一个事务中它很快。

我无法将此工作分解为较小的交易,因为我正在处理的请求需要在单个交易中。

我能做些什么来快速完成此交易中的选择查询?

2 个答案:

答案 0 :(得分:0)

所以,请添加约束/主键。这将允许您删除所有选择。 可以考虑使用MERGE作为@ Egor_Skriptunoff推荐。

或者为您选择的列添加索引。

答案 1 :(得分:0)

如果首先插入数百万条记录就会进行增量提交,因为您可能遇到临时空间碎片或限制导致速度减慢。这可以在开始结束块中完成 此外,这允许您通过

添加索引
create index b indexName on table_name(col1, col2, col3);
如前所述,

合并速度更快 或者添加所有忽略的重复项,然后删除重复项 这可以通过
来完成 例如

begin
    insert into table_name select * from table_name; [ if pulling from another table]or[use values and column maps]
    delete from table_name A where rowid >(select min(rowid) from table_name B where A.key_value=B.key_value);
end

如果在程序中这也需要 查询和删除都可以在begin end block中执行immediate('你在这里'ddl语句';');

相关问题