查看: 2397|回复: 6

SQL优化

[复制链接]
论坛徽章:
0
发表于 2009-7-9 13:47 | 显示全部楼层 |阅读模式
1.查找全部问题(申报号:空,办理状态:全部,委办局:某个,问题:全部问题,开始日期和终止日期:非空,申报入口:全部)
select * from
(select rownum num,SN,CASENAME,name,APPLICANT,APPLYDATE,STATUS,Timeout_b, Exceed_b,Jump_b,tellout,instanceid  
from
         (select SN,CASENAME,name,APPLICANT,APPLYDATE,STATUS,Timeout_b, Exceed_b,Jump_b,tellout,instanceid  
          from
               (select  a.SN,c.Casename,f.name,a.APPLICANT,to_char(a.APPLYDATE,'yyyy-mm-dd') APPLYDATE,a.STATUS,b.Timeout_b,b.Exceed_b,b.Jump_b,b.tellout,a.instanceid
                from JC_CASE_INSTANCE a left join rjc_case_problem b on a.INSTANCEID=b.instanceid left join kl_government f on a.govid=f.ID,jckl_case c
                where a.CASEID=c.CASEID  
                     and a.sn in (select  distinct a.SN from  rjc_case_problem b join jc_case_instance  a on b.instanceid =a.instanceid   
                                   where b.TIMEOUT_B=1 OR b.EXCEED_B=1 OR b.JUMP_B=1 OR b.OTHER_B=1 OR b.tellout=1)  
                     and a.Govid='18'
                     and (to_char(a.APPLYDATE,'yyyy-mm-dd') between '2009-05-01' and '2009-06-01')                     
                union              
                select  a.SN,d.SUBNAME,f.name,a.APPLICANT,to_char(a.APPLYDATE,'yyyy-mm-dd') APPLYDATE,a.STATUS,b.Timeout_b,b.Exceed_b,b.Jump_b,b.tellout,a.instanceid  
                from JC_CASE_INSTANCE a left join rjc_case_problem b on a.INSTANCEID=b.instanceid left join kl_government f on a.govid=f.ID,jckl_case_sub d
                where a.CASEID=d.SUBID
                      and d.systemid in (select systemid from jckl_case c where  c.startdaTE<=a.APPLYDATE and
                                          (case  when c.enddate is null then sysdate else c.enddate end)>=a.APPLYDATE)  
                      and a.sn in (select  distinct a.SN from  rjc_case_problem b join jc_case_instance  a on b.instanceid =a.instanceid  
                                          where b.TIMEOUT_B=1 OR b.EXCEED_B=1 OR b.JUMP_B=1 OR b.OTHER_B=1 OR b.tellout=1)  
                      and a.Govid='18'  
                      and (to_char(a.APPLYDATE,'yyyy-mm-dd') between '2009-05-01' and '2009-06-01')
                    )
               order by APPLYDATE desc,SN desc
           )
)
         where num between 1 and 50;



在SQL*PLUS查询时,需要5分钟,请问一下如何优化了
论坛徽章:
62
2015中国数据库技术大会纪念徽章
日期:2015-04-24 16:04:24版主2段
日期:2012-05-15 15:24:112012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-01-04 11:49:54ITPUB十周年纪念徽章
日期:2011-11-01 16:19:41现任管理团队成员
日期:2011-05-07 01:45:08
发表于 2009-7-9 14:15 | 显示全部楼层
嵌套太多,看一下执行计划。

使用道具 举报

回复
论坛徽章:
0
发表于 2009-7-9 14:16 | 显示全部楼层
期待大师出现。

使用道具 举报

回复
认证徽章
论坛徽章:
11
2012新春纪念徽章
日期:2012-01-04 11:56:442015年新春福章
日期:2015-03-06 11:58:39暖羊羊
日期:2015-03-04 14:53:002014年新春福章
日期:2014-02-18 16:44:08问答徽章
日期:2014-01-02 15:42:02优秀写手
日期:2013-12-18 09:29:11ITPUB社区12周年站庆徽章
日期:2013-08-20 11:30:112013年新春福章
日期:2013-02-25 14:51:24复活蛋
日期:2013-01-25 13:54:43奥运纪念徽章
日期:2012-12-06 09:21:40
发表于 2013-6-7 15:13 | 显示全部楼层
没有答案的贴子

使用道具 举报

回复
论坛徽章:
70
ITPUB元老
日期:2007-07-19 08:57:15乌索普
日期:2016-06-24 14:29:16沸羊羊
日期:2015-02-12 09:15:562014年世界杯参赛球队:喀麦隆
日期:2014-05-20 16:06:36马上有车
日期:2014-02-18 16:41:112014年新春福章
日期:2014-02-18 16:41:11迷宫蛋
日期:2013-04-24 13:52:55茶鸡蛋
日期:2013-04-19 13:54:282013年新春福章
日期:2013-02-25 14:51:24蛋疼蛋
日期:2013-02-19 14:05:00
发表于 2013-6-7 16:18 | 显示全部楼层
执行计划帖出来 没执行计划 调飞机啊!

使用道具 举报

回复
论坛徽章:
70
ITPUB元老
日期:2007-07-19 08:57:15乌索普
日期:2016-06-24 14:29:16沸羊羊
日期:2015-02-12 09:15:562014年世界杯参赛球队:喀麦隆
日期:2014-05-20 16:06:36马上有车
日期:2014-02-18 16:41:112014年新春福章
日期:2014-02-18 16:41:11迷宫蛋
日期:2013-04-24 13:52:55茶鸡蛋
日期:2013-04-19 13:54:282013年新春福章
日期:2013-02-25 14:51:24蛋疼蛋
日期:2013-02-19 14:05:00
发表于 2013-6-7 16:21 | 显示全部楼层
  1. and (to_char(a.APPLYDATE, 'yyyy-mm-dd') between
  2.                                '2009-05-01' and '2009-06-01')   
复制代码
改成
  1.   and  a.APPLYDATE >=to_date('2009-05-01','yyyy-mm-dd') and a.APPLYDATE <to_date('2009-06-02','yyyy-mm-dd')
复制代码
试试

使用道具 举报

回复
论坛徽章:
12
2012新春纪念徽章
日期:2012-01-04 11:49:54秀才
日期:2015-09-11 10:43:06处女座
日期:2015-07-20 16:19:14懒羊羊
日期:2015-03-09 13:14:372015年新春福章
日期:2015-03-06 11:57:31美羊羊
日期:2015-03-04 14:48:58马上有房
日期:2014-07-21 13:13:25凯迪拉克
日期:2013-09-12 15:56:12蜘蛛蛋
日期:2013-06-18 16:09:38咸鸭蛋
日期:2013-03-14 08:29:23
发表于 2013-6-7 16:26 | 显示全部楼层
本帖最后由 doni 于 2013-6-7 16:27 编辑

6#说的也是我想说的,太多人喜欢to_char(date, 'yyyy-mm-dd') ......,这样是用不上index的,除非index based function
只能说,现在相当多的程序员只在乎结果,不重视过程,因此只会coding,但始终不会提高

使用道具 举报

回复

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

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 
京ICP备09055130号-4  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表