UPDATE table1 t1 SET (bh,zch,lrr,lrrq,zsh)=
(SELECT  t2.bh AS bh,t2.zch AS zch,t2.lrr AS lrr,SYSDATE,
(SELECT t4.zsh FROM table4 t4 WHERE t4.xh=t2.xh AND t4.sfzh=t2.sfzh)AS zsh 
FROM table2 t2 WHERE ROWID=(SELECT MAX(ROWID) FROM table2 WHERE bh=t2.bh AND zch=t2.zch) AND t2.bh=t1.bh AND t2.zch=t1.zch AND t2.zch IS NOT NULL)
WHERE EXISTS(SELECT 1 FROM table2 t2 WHERE t2.bh=t1.bh AND t2.zch=t1.zch AND t2.zch IS NOT NULL)
AND EXISTS(SELECT 1 FROM table3 t3 WHERE t3.bh=t1.bh);注释:1、表table2中有重复记录,所以加了ROWID取其中一条;
     2、主要是将表table2与表table4中的个别字段组合后UPDATE至table1表
问题:表table2与表table4中记录均只有8000左右,但执行花费了好几分钟!
望各位指教,怎么优化它!

解决方案 »

  1.   

    (SELECT  t2.bh AS bh,t2.zch AS zch,t2.lrr AS lrr,SYSDATE,
    (SELECT t4.zsh FROM table4 t4 WHERE t4.xh=t2.xh AND t4.sfzh=t2.sfzh)AS zsh 
    FROM table2 t2 WHERE ROWID=(SELECT MAX(ROWID) FROM table2 WHERE bh=t2.bh AND zch=t2.zch) AND t2.bh=t1.bh AND t2.zch=t1.zch AND t2.zch IS NOT NULL)
    WHERE EXISTS(SELECT 1 FROM table2 t2 WHERE t2.bh=t1.bh AND t2.zch=t1.zch AND t2.zch IS NOT NULL)
    这句怎么这么写?你单独执行一下这一句看看,是不是因为这句慢导致update慢。