请教各位老师一个查询缓慢的问题

SKYlwc912 2008-08-07 03:37:57
我这因为要做一个统计,所以写了这么一个sql语句:
select * from (select decode(a.Status,0,'受理',1,'承办环节',2,'审核环节',3,'批准环节',4,'办结环节',100,'办结',a.Status) as Status_NAME,
a.Status,a.nid,to_char(a.ISSUE_DATE,'YYYY-MM-DD') as ISSUE_DATE,a.FILE_ID,a.APP_UINT,a.APP_INFO,a.TRANSACT,
nvl(c.UserNAme,a.TRANSACT) as CURRENT_TRANSACT,a.SHENPISHIXIAN,b.name,nvl(d.bjjg,1000) as bjjg,a.EXAM_TYPE,a.ADDRESS,a.JLR,a.IS_BIGPRJ,
a.RETURN_RES,e.NAME as BJJG_NAME from EXAM_ACCEPT a,EXAM_DIC_FLOW b,
(select e.*,g.UserNAme from EXAM_LOG e,Sys_Users g where e.RECEIVER = g.usercode and NID=(select max(NID) from EXAM_LOG f where e.FILE_NUMBER=f.FILE_NUMBER)) c,
EXAM_END d,(select * from SYS_DIC where DIC_TYPE=3) e
where a.Exam_Type=b.opration_code and a.nid=c.FILE_NUMBER(+) and a.NID=d.file_id(+) and d.bjjg=e.NID(+) and a.TAG_DEL<>1 ) t where 1=1
order by t.Issue_Date desc
但是它很耗费时间,这几个表里最多记录的也就2万多条记录,但这语句一执行就要差不多一小时才出结果,造成慢的语句是第5行搜索max(NID)的那部分特费时间。不知道有什么办法优化一下不?
我试过把*换成具体列名也还是一样慢。
...全文
91 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
SKYlwc912 2008-08-07
  • 打赏
  • 举报
回复
多谢oracledbalgtu,我把语句改了就可以直接用了,而且速度很快,非常感谢!
SKYlwc912 2008-08-07
  • 打赏
  • 举报
回复
CREATE INDEX i_EXAM_LOG_aaa ON EXAM_LOG(FILE_NUMBER,MNID DESC);
中的MNID 要先声明一下吗,创建时报错“ORA-00904: "MNID": 无效的标识符”
oracledbalgtu 2008-08-07
  • 打赏
  • 举报
回复

创建如下index,并修改代码如下:
CREATE INDEX i_EXAM_LOG_aaa ON EXAM_LOG(FILE_NUMBER,MNID DESC);

SELECT *
FROM (SELECT DECODE(A.STATUS,
0,
'受理',
1,
'承办环节',
2,
'审核环节',
3,
'批准环节',
4,
'办结环节',
100,
'办结',
A.STATUS) AS STATUS_NAME,
A.STATUS,
A.NID,
TO_CHAR(A.ISSUE_DATE, 'YYYY-MM-DD') AS ISSUE_DATE,
A.FILE_ID,
A.APP_UINT,
A.APP_INFO,
A.TRANSACT,
NVL(C.USERNAME, A.TRANSACT) AS CURRENT_TRANSACT,
A.SHENPISHIXIAN,
B.NAME,
NVL(D.BJJG, 1000) AS BJJG,
A.EXAM_TYPE,
A.ADDRESS,
A.JLR,
A.IS_BIGPRJ,
A.RETURN_RES,
E.NAME AS BJJG_NAME
FROM EXAM_ACCEPT A,
EXAM_DIC_FLOW B,
(SELECT E.*, G.USERNAME
FROM EXAM_LOG E,
SYS_USERS G,
(SELECT MAX(NID) MNID, FILE_NUMBER
FROM EXAM_LOG
GROUP BY FILE_NUMBER) X
WHERE E.RECEIVER = G.USERCODE
AND E.NID = X.MNID
AND E.FILE_NUMBER = X.FILE_NUMBER) C,
EXAM_END D,
(SELECT * FROM SYS_DIC WHERE DIC_TYPE = 3) E
WHERE A.EXAM_TYPE = B.OPRATION_CODE
AND A.NID = C.FILE_NUMBER(+)
AND A.NID = D.FILE_ID(+)
AND D.BJJG = E.NID(+)
AND A.TAG_DEL <> 1) T
WHERE 1 = 1
ORDER BY T.ISSUE_DATE DESC;


[Quote=引用楼主 SKYlwc912 的帖子:]
我这因为要做一个统计,所以写了这么一个sql语句:
select * from (select decode(a.Status,0,'受理',1,'承办环节',2,'审核环节',3,'批准环节',4,'办结环节',100,'办结',a.Status) as Status_NAME,
a.Status,a.nid,to_char(a.ISSUE_DATE,'YYYY-MM-DD') as ISSUE_DATE,a.FILE_ID,a.APP_UINT,a.APP_INFO,a.TRANSACT,
nvl(c.UserNAme,a.TRANSACT) as CURRENT_TRANSACT,a.SHENPISHIXIAN,b.name,nvl(d.bjjg,1000) as bjjg,a.EX…
[/Quote]
作业是学校教育教学管理工作的重要环节,是课堂教学活动的必要补充。做作业,是个学生就跑不了。但问题是一些学校作业数量过多、质量不高、功能异化,既达不到温故知新的效果,又占用了学生正常的锻炼、休息、娱乐时间。长期以来,义务教育学校特别是小学存在“三点半”放学现象,这一政策的初衷是为学生减负,但没想到,校内减负校外增负,而且校外增加的负担处于失控、失管的状态。 过重的课业负担严重损害青少年的身心健康,危害民族未来。只有通过减轻课业负担,才能保证学生生动活泼的个性、健康快乐成长。 今年7月国家为了切实提升学校育人水平,持续规范校外培训,有效减轻义务教育阶段学生过重作业负担和校外培训负担,印发了《关于进一步减轻义务教育阶段学生作业负担和校外培训负担的意见》(简称“双减”)。从这开始,“双减”成了街头巷尾议论的主要话题,更变成了教师的工作指针。每位教师肩负起“双减提质”的研究任务。 首先欢迎各位老师的到来,和我一起为备战中考互相学习。为准备好此次中考英语备考策略交流,在总结自身教学经验的同时,也特别向奋战在初三一线的同事们请教了他们的教学经验。通过不断的深入学习和总结,今天,将我所学、所得、所用与

17,082

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧