आप डायरेक्ट पाथ इंसर्ट आज़मा सकते हैं ऑपरेशन को तेज करने के लिए, लेकिन 100 रिकॉर्ड के लिए पारंपरिक पथ सम्मिलन पर्याप्त तेज़ होना चाहिए और ऐसा लगता है कि समस्या बड़ी संख्या में स्रोतों से लॉग में डालने के दौरान टेबल लॉकिंग के बारे में है।
Oracle को डायरेक्ट पाथ इंसर्ट का उपयोग करने का निर्देश देने के लिए आपको जोड़ें या APPEND_VALUES इंसर्ट स्टेटमेंट सिंटैक्स के आधार पर संकेत। उदा.
insert /*+ APPEND */
into multi_insert(val_1, val_2)
select * from (
select 100, 20 from dual union all
select 21, 2 from dual union all
select 321, 10 from dual union all
select 22, 13 from dual union all
select 14, 121 from dual union all
select 11, 112 from dual union all
select 112, 23 from dual union all
select 132, 2323 from dual union all
select 121, 34 from dual union all
select 24333, 333 from dual union all
select 1232, 3434 from dual union all
select 4554, 3434 from dual union all
select 3434, 211 from dual union all
select 3434, 1233 from dual union all
select 12, 22 from dual union all
select 356, 233 from dual union all
select 9347, 23 from dual union all
select 8904, 245 from dual union all
select 342, 4545 from dual union all
select 453, 233 from dual
)
यदि इन्सर्ट स्टेटमेंट PL/SQL कोड से उत्पन्न हुआ है तो आप प्रदर्शन को बेहतर बनाने के लिए forall स्टेटमेंट के साथ बल्क इंसर्ट का उपयोग कर सकते हैं (एसक्यूएलफ़िल्ड ) :
declare
type TRowList is table of multi_insert%rowtype index by binary_integer;
vRowList TRowList;
vRow multi_insert%rowtype;
begin
vRow.val_1 := 100;
vRow.val_2 := 20;
vRowList(0) := vRow;
vRow.val_1 := 21;
vRow.val_2 := 2;
vRowList(1) := vRow;
vRow.val_1 := 321;
vRow.val_2 := 10;
vRowList(2) := vRow;
-- ...
forall vIdx in vRowList.first .. vRowList.last
insert /*+ APPEND_VALUES */ -- direct path insert
into multi_insert values vRowList(vIdx);
end;