在單個事務中,我將可能的行插入到表中,然後插入行我執行查詢以查看是否已有一行包含關鍵字插入。在單個事務中插入多行時,Oracle查詢性能下降
我看到的是檢查密鑰的查詢在我的事務中變得非常緩慢,但是從另一個事務處理它是快速的,並且在下一個事務中它很快。
我無法將這項工作分解爲更小的事務,因爲我正在處理的請求需要在單個事務中。
有什麼我可以做的,使這個交易中的選擇查詢快?
在單個事務中,我將可能的行插入到表中,然後插入行我執行查詢以查看是否已有一行包含關鍵字插入。在單個事務中插入多行時,Oracle查詢性能下降
我看到的是檢查密鑰的查詢在我的事務中變得非常緩慢,但是從另一個事務處理它是快速的,並且在下一個事務中它很快。
我無法將這項工作分解爲更小的事務,因爲我正在處理的請求需要在單個事務中。
有什麼我可以做的,使這個交易中的選擇查詢快?
如果插入數以百萬計的記錄第一件事是做增量提交,因爲您很可能觸及臨時空間碎片或導致速度減慢的限制。可在開始結束塊 也可以做,這可以讓你通過
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
如果在過程中,這也將需要 查詢和刪除可以在開始端塊並執行即時( '你在這裏陳述';');
爲什麼你檢查行是否已經存在?創建一個唯一的約束(或索引),並簡單地處理錯誤。 – 2013-03-21 10:54:04
是的,a_horse_with_no_name是對的。爲什麼要複製內置的功能,效率要高出數十億倍! – Rachcha 2013-03-21 10:55:00
使用'merge'來避免插入重複項。 – 2013-03-21 10:56:09