2014-10-22 65 views
1

我有一個選擇查詢在oracle數據庫上運行,只需要大約十五秒的時間來運行。然而,當我嘗試從這裏創建一個表時,無論是使用create select as還是創建一個空表並插入行,創建都會繼續運行並運行(到目前爲止,我已經等待了15分鐘而沒有結果)。創建表的時間比選擇sql要長得多

下面是我在創建空白然後插入方法的嘗試,這說明我創建的表和數據的結構,我想插入:

CREATE TABLE MYNEWTABLE 
(mykey number(10), brand varchar2(255), day_id number(10), adateone date, p_id number (10), startdate date, enddate date, another_day_id number(10)) 
INSERT INTO MYNEWTABLE 
select ns.mykey, ns.brand, oc.day_id, oc.day_date as adateone, tbut.p_id, tbut.startdate, tbut.enddate, cust.another_day_id 
from TABLE_1 ns 
RIGHT JOIN TABLE_2 tbut 
ON ns.mykey = tbut.mykey 
LEFT JOIN 
TABLE_3 cust 
ON ns.mykey = cust.mykey 
LEFT JOIN DATE_TABLE oc 
on cust.first_del_day_id = oc.day_id 
where ns.brand = 'SOME VALUE' 

是什麼原因延誤?桌子的創作如此緩慢,我該如何改進呢?

非常感謝。

回答

1

當任何會話掛起時,要檢查的適當東西是V$SESSION_WAIT

執行,

select * from v$session_wait where sid = <your sid> 

根據等待的結果,你需要找出哪些會話抱着你正在等待鎖。

0

看起來像你的SQL運行使用嵌套循環。因此,15秒是時候返回前N行(其中n取決於您的客戶端工具)。當您開始獲取所有行並插入新表時,需要更多時間。

相關問題