我在oracle数据库上运行了一个select查询,只需要大约15秒就可以运行。但是当我尝试从中创建一个表时,无论是使用create select as还是创建一个空表并插入行,create都会保持运行和运行(到目前为止,我已经等了十五分钟没有结果)。
下面是我尝试创建空白然后插入方法,它显示了我正在创建的表的结构以及我要插入的数据:
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'
表格创建速度如此之慢的原因是什么?如何改进?
非常感谢。
答案 0 :(得分:1)
当任何会话挂起时,要检查的是V$SESSION_WAIT
。
执行,
select * from v$session_wait where sid = <your sid>
根据等待的结果,您需要确定哪个会话持有您正在等待的锁。
答案 1 :(得分:1)
看起来您的SQL使用嵌套循环运行。所以15秒是时候返回前N行(其中n取决于你的客户端工具)。当您开始获取所有行并插入新表时,需要更多时间。