起步软件技术论坛-X3

 找回密码
 立即注册
搜索
楼主: dragonsoft

【结贴】流程监控、待办任务问题**

[复制链接]
发表于 2008-10-22 14:48:20 | 显示全部楼层
优化后的语句是什么样子的?贴出来看看
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-10-23 12:11:57 | 显示全部楼层
这个语句引起数据库整个操作挂起,执行时间非常久
SELECT FPRIORITY,
       FSUBJECT,
       FCREATETIME,
       FPLANSTARTTIME,
       FPLANFINISHTIME,
       FSTARTTIME,
       FFINISHTIME,
       FSTATE,
       FGUID,
       FTYPE,
       FFUNCURL,
       FUPDATEFLAG,
       FPROCURL,
       (case
         when fpriority = 'tpHigh' then
          '2'
         when fpriority = 'tpNormal' then
          '1'
         else
          '0'
       end) as MyField
  FROM TTASK
WHERE ((TTASK.FCLIENTACCOUNT = 'JUSTEP.COM'))
   and ((TTASK.FGUID IN
       (SELECT TTASKMESSAGE.FTASKGUID
            FROM TTASKMESSAGE
           WHERE (TTASKMESSAGE.FSTATE IN
                 ('tmsSend', 'tmsReceived', 'tmsProcessing'))
             AND (TTASKMESSAGE.FRORGURL IN
                 ('\ROOT\350200000000.OGN\350203000000.OGN\350203200000.DPT\BAMJ.PTM\210197.PSM') OR
                 ((TTASKMESSAGE.FRDEPT = '350203200000') AND
                 (TTASKMESSAGE.FRPOSITION = 'BAMJ') AND
                 (TTASKMESSAGE.FRPERSON = '210197'))))))
ORDER BY MyField Desc, FCREATETIME desc


同时有200个用户在做这些操作,所以数据库的性能被拖垮
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-10-23 12:14:22 | 显示全部楼层
修改后语句如下,整个执行小效率是天壤之别,差10几万倍

SELECT (select FPRIORITY from TTASK where FGUID = FTASKGUID) FPRIORITY,
       (select FSUBJECT from TTASK where FGUID = FTASKGUID) FSUBJECT,
       (select FCREATETIME from TTASK where FGUID = FTASKGUID) FCREATETIME,
       (select FPLANSTARTTIME from TTASK where FGUID = FTASKGUID) FPLANSTARTTIME,
       (select FPLANFINISHTIME from TTASK where FGUID = FTASKGUID) FPLANFINISHTIME,
       (select FSTARTTIME from TTASK where FGUID = FTASKGUID) FSTARTTIME,
       (select FFINISHTIME from TTASK where FGUID = FTASKGUID) FFINISHTIME,
       (select FSTATE from TTASK where FGUID = FTASKGUID) FSTATE,
       (select FGUID from TTASK where FGUID = FTASKGUID) FGUID,
       (select FTYPE from TTASK where FGUID = FTASKGUID) FTYPE,
       (select FFUNCURL from TTASK where FGUID = FTASKGUID) FFUNCURL,
       (select FUPDATEFLAG from TTASK where FGUID = FTASKGUID) FUPDATEFLAG,
       (select FPROCURL from TTASK where FGUID = FTASKGUID) FPROCURL,
       (case
         when (select fpriority from TTASK where FGUID = FTASKGUID) = 'tpHigh' then
          '2'
         when (select fpriority from TTASK where FGUID = FTASKGUID) = 'tpNormal' then
          '1'
         else
          '0'
       end) as MyField
  FROM TTASKMESSAGE
WHERE (TTASKMESSAGE.FSTATE IN ('tmsSend', 'tmsReceived', 'tmsProcessing'))
   AND (TTASKMESSAGE.FRORGURL IN
       ('\ROOT\350200000000.OGN\350203000000.OGN\350203200000.DPT\BAMJ.PTM\210197.PSM') OR
       ((TTASKMESSAGE.FRDEPT = '350203200000') AND
       (TTASKMESSAGE.FRPOSITION = 'BAMJ') AND
       (TTASKMESSAGE.FRPERSON = '210197')))
ORDER BY MyField Desc, FCREATETIME desc


我程序按照这个语句进行修改,不知道对程序否有其他的影响,请帮忙排查,X3代码中很多这样子类似执行效率低下的sql语句
回复 支持 反对

使用道具 举报

发表于 2008-10-23 13:34:23 | 显示全部楼层
这两个语句在Oracle工具里执行,
耗费时间和返回记录数各是多少?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-10-23 14:20:05 | 显示全部楼层
返回的记录数是一样的,没有修改的语句从oracle的监控工具去看需要15万秒多,修改后的执行只需要1秒多
回复 支持 反对

使用道具 举报

发表于 2008-10-23 14:32:24 | 显示全部楼层
楼主,查询结果有多少条记录?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-10-23 14:37:48 | 显示全部楼层
21条啊
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-10-23 14:40:57 | 显示全部楼层
不管结果是几条,返回都需要很长时间,我们建立的索引没有用到才会这样子的
回复 支持 反对

使用道具 举报

发表于 2008-10-23 14:43:35 | 显示全部楼层
改成这样看看要多少时间:

SELECT FPRIORITY,
       FSUBJECT,
       FCREATETIME,
       FPLANSTARTTIME,
       FPLANFINISHTIME,
       FSTARTTIME,
       FFINISHTIME,
       FSTATE,
       FGUID,
       FTYPE,
       FFUNCURL,
       FUPDATEFLAG,
       FPROCURL,
       (case
         when fpriority = 'tpHigh' then
          '2'
         when fpriority = 'tpNormal' then
          '1'
         else
          '0'
       end) as MyField
  FROM TTASK
WHERE ((TTASK.FCLIENTACCOUNT = 'JUSTEP.COM'))
   and ((exists
       (SELECT TTASKMESSAGE.FTASKGUID
            FROM TTASKMESSAGE
           WHERE (TTASKMESSAGE.FSTATE IN
                 ('tmsSend', 'tmsReceived', 'tmsProcessing'))
             AND (exists
                 ('\ROOT\350200000000.OGN\350203000000.OGN\350203200000.DPT\BAMJ.PTM\210197.PSM') OR
                 ((TTASKMESSAGE.FRDEPT = '350203200000') AND
                 (TTASKMESSAGE.FRPOSITION = 'BAMJ') AND
                 (TTASKMESSAGE.FRPERSON = '210197'))))))
ORDER BY MyField Desc, FCREATETIME desc
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-10-23 15:42:51 | 显示全部楼层
这个我们改过了,执行还是需要很长时间,没有时间等待返回结果
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2025-7-28 02:22 , Processed in 0.041356 second(s), 13 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表