sql语句如下:
对sql语句做一些说明,CA_TaskList表实时有数据插入,num为模仿Oracle函数 row_number() over()函数实现分组后自增长,目前问题 update进程执行超时。导致app龟速,请大神帮忙。
Update CA_TaskList 
                Set ThreadID = 30256, 
Task_LockTime = '2012-12-11 01:26:23' , 
Task_LockFlag = 1, 
                    Task_Status = 1 , 
ThreadStartTime = sysdate() 
  Where Task_ID IN (select ti.task_id from (SELECT TASK_ID
                    FROM (SELECT TASK_ID
                       FROM (SELECT * FROM
                                (SELECT aa.RTU_ID,TASK_ID,aa.COLLECT_PRI,aa.TASK_DATAITEMID,aa.AUTOTASK_FLAG,aa.TASK_TIME,@rownum:=@rownum+1 ,
                                if(@PRTU_ID=aa.RTU_ID,@NUM:=@NUM+1,@NUM:=1) AS NUM,
                                @PRTU_ID:=aa.RTU_ID
                                from (SELECT RTU_ID,TASK_ID,COLLECT_PRI,TASK_DATAITEMID,AUTOTASK_FLAG,TASK_TIME
                                     FROM CA_TASKLIST
                                     WHERE 
                                       AUTOTASK_FLAG = 1
                                       AND ((TASK_STATUS = 0) OR
                                           (TASK_STATUS = 1 AND THREADSTARTTIME < DATE_SUB(SYSDATE(),interval 5 MINUTE)))
                                       AND (VALIDTIME_START < time_format(now(),'%H:%i:%s') AND
                                           VALIDTIME_END > time_format(now(),'%H:%i:%s') AND
                                           EXECSTARTTIME < SYSDATE()) And (Channel_Group_ID IN (10100020))  AND (Channel_Group_ID IN (SELECT DISTINCT CHANNEL_NO FROM p_channel_cfg WHERE STATUS_CODE = 1 )) AND (Unique_id IN ((select max(unique_id) from ca_tasklist group by task_config_id))) AND ((TASK_LOCKFLAG = 0) OR
                                   (TASK_LOCKFLAG = 1 AND TASK_LOCKTIME < DATE_SUB(SYSDATE(),interval 2 MINUTE)))
                                    AND (RTU_ID NOT IN
                                   (SELECT DISTINCT RTU_ID
                                       FROM CA_TASKLIST
                                      WHERE ((TASK_STATUS = 1 AND
                                            THREADSTARTTIME > DATE_SUB(SYSDATE(),interval 5 MINUTE)) OR
                                            (TASK_STATUS = 2 AND
                                            THREADENDTIME > DATE_SUB(SYSDATE(),interval 5 SECOND)))))
                                   ORDER BY AUTOTASK_FLAG, COLLECT_PRI, TASK_TIME) aa,(select @rownum :=0  , @PRTU_ID := null,@RN:=0) a ) result) eee
                     WHERE NUM = 1
                     ORDER BY AUTOTASK_FLAG, COLLECT_PRI, TASK_TIME) ddd
             limit 100) as ti)