没想到oracle语句比sqlserver麻烦这么多!!!小弟有个oracle更新语句update AA set status=1,BatchNo='01003' where MM in('000038') and DD=1 and CC=0 and XX=1 and rownum<=1但是运行起来奇慢无比,但是在sqlserver数据库同数据量中运行却很快,表AA中有18000000数据,但是我运行下面的查询时select /*+INDEX(AA AA _MAIN)*/ * from XPackCodeImportTemp where MM in('000038') and DD=1 and CC=0 and XX=1 and rownum<=1
或者
select * from AA where MM in('000038') and DD=1 and CC=0 and XX=1 and rownum<=1速度奇快无比,实在是无奈了,该如何修改那个update语句呀?? 需要说明 MM in('000038') 必须用in或者exists,因为可能有多个!哪位老大能指点一下~~多谢!!
或者
select * from AA where MM in('000038') and DD=1 and CC=0 and XX=1 and rownum<=1速度奇快无比,实在是无奈了,该如何修改那个update语句呀?? 需要说明 MM in('000038') 必须用in或者exists,因为可能有多个!哪位老大能指点一下~~多谢!!
这样查询起来很快,不过更新就非常慢了……
不知楼主是否有权限查看v$session表和v$lock表,如果有的话可以查一下看看锁等待情况.
set u.status=1,u.BatchNo='01003'
where exists( select 1 from AA v where v.Pk_Id = u.Pk_Id
and v.MM in('000038') and v.DD=1 and v.CC=0 and v.XX=1 and rownum <=1 )
看下结果看
要是可以在plsql developer右键点击表名,把建表语句贴给大伙看看吧。
SELECT INDEX_NAME,TABLE_NAME,COLUMN_NAME FROM ALL_IND_COLUMNS WHERE TABLE_NAME ='AA'; 查出来没数据 俨然没有索引
可能是锁等到的问题
是生产库还是测试库
把其他session全杀了
再执行下看