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)
对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)
解决方案 »
- 小妹请教前辈统计行数的问题!
- mysql数据导入问题
- 一个Hibernate一对多产生的问题
- 开心网是什么类型的数据库?
- mysqldump备份整个数据库?包括把如何创建数据库也备份。
- 我只能用localhost访问数据库,不能用本机的名字或其它的名字吗?
- 经过MD5加密过的数据怎么存到数据库……
- 在MYSQL里,Lock Tables 与Unlock Tables怎么使用?!(举例)
- 有关Mysql的启动?
- 小白问!MySQL创建的新连接里为什么会有旧连接里的数据库?
- Linux下安装MYSQL后,启动mysql显示如下错误
- csv导入mysql时,01-JAN-12日期如何识别为2012-01-01?
MySQL中的ROWNUM的实现
MySQL 几乎模拟了 Oracle,SQL Server等商业数据库的大部分功能,函数。但很可惜,到目前的版本(5.1.33)为止,仍没有实现ROWNUM这个功能。 下面介绍几种具体的实现方法.建立实验环境如下mysql> create table tbl ( -> id int primary key, -> col int -> );Que...