首页 | 互联网 | IT动态 | IT培训 | Cisco | Windows | Linux | Java | .Net | Oracle | 软件测试 | C/C++ | 嵌入式开发 | 存储世界 | 服务器
网络设备 | IDC | 安全 | 求职招聘 | 数字网校 | 网页设计 | 平面设计 | 技术专题 | 电子书下载 | 教学视频 | 源码下载 | 搜索 | 博客 | 论坛
中国IT实验室Oracle频道
中国IT教育
Google
首页 入门基础 安装配置 体系架构 PLSQL 备份恢复 性能调优 开发技术 资讯动态 考试认证 下载 专题 讨论
您现在的位置: 中国IT实验室 >> Oracle >> 性能调优 >> 正文

当数据积累到一定时间后执行会越来越慢

        最近很长一段时间都在优化一个项目,这个项目存在许多问题,从数据架构到工作流程,我一直在思考一些有关oracle性能优化的问题,我跟开发实施人员进行过多次交流,发现存在许多交流障碍,许多问题实施人员觉得sql语句执行很快,并不存在性能问题,我花了大量时间要他看执行计划,说明当数据积累到一定时间后,会执行越来越慢。

        我举一个例子来说明问题:

         SELECT v2.*
        FROM consultationrecorddoctor t1
        RIGHT OUTER JOIN
        (SELECT cr.*, crc.modifydate, crc.modifyuserid, crc.consultationtime,
        crc.applyconsultationdeptid, crc.askconsultationdeptid,
        crc.consultationdeptid, crc.casehistory_right,
        crc.consultationorder_right, crc.consultationidea_right,
        crc.otherhospital_right, crc.consultationdate,
        crc.maindoctorid, c1.deptname_vchr AS applydeptname,
        c2.deptname_vchr AS askdeptname,
        c3.deptname_vchr AS deptname,
        f_getempnamebyno (crc.maindoctorid) AS maindocname
        FROM consultationrecord cr,
        consultationrecordcontent crc,
        t_bse_deptdesc c1,
        t_bse_deptdesc c2,
        t_bse_deptdesc c3,
        (SELECT cr.inpatientid, cr.inpatientdate, cr.opendate,
        cr.createdate,
        MAX (crc.modifydate) AS maxmodifydate
        FROM consultationrecord cr,
        consultationrecordcontent crc
        WHERE (crc.applyconsultationdeptid = '0000208')
        AND cr.inpatientid = crc.inpatientid
        AND cr.inpatientdate = crc.inpatientdate
        AND cr.opendate = crc.opendate
        AND cr.status = 0
        GROUP BY cr.inpatientid,
        cr.inpatientdate,
        cr.opendate,
        cr.createdate) v1
        WHERE (crc.applyconsultationdeptid = '0000208')
        AND cr.inpatientid = crc.inpatientid
        AND cr.inpatientdate = crc.inpatientdate
        AND cr.opendate = crc.opendate
        AND cr.status = 0
        AND crc.applyconsultationdeptid = c1.deptid_chr
        AND crc.askconsultationdeptid = c2.deptid_chr
        AND crc.consultationdeptid = c3.deptid_chr
        AND cr.inpatientid = v1.inpatientid
        AND cr.inpatientdate = v1.inpatientdate
        AND cr.opendate = v1.opendate
        AND v1.maxmodifydate = crc.modifydate
        AND crc.maindoctorid IS NOT NULL) v2
        ON t1.inpatientid = v2.inpatientid
        AND t1.inpatientdate = v2.inpatientdate
        AND t1.opendate = v2.opendate
        AND t1.modifydate = v2.modifydate
        AND t1.employeeflag = 1
        WHERE t1.employeeid IS NULL
        ORDER BY t1.employeeid DESC, v2.askdeptname, v2.consultationdate;

        查询使用了一个右连接,查询的表并没有包含t1表的字段,而且在实际的t1.employeeid中根本不存在NULL的值,实际上是从一个大的结果集剔除一个大结果集的而获得一个小的结果集,随着crc表数据量加大,会越来越慢!

【责编:michael】

中国IT教育

相关产品和培训
文章评论
 友情推荐链接
 认证培训
 专题推荐

 ·关于Java框架技术专题
 ·XML全攻略技术专题
 ·JAVA开源技术介绍专题
 ·Java嵌入式开发之J2ME技术专题
 ·超前体验 Oracle 11g的5个新特性…
 ·揭密使用VB.NET的五个实用技巧
 ·Oracle和SQL Server常用函数对比专题…
 ·展现C#世界 C#程序设计专题…
 ·Java入门 Tomcat的配置技巧精华专题…
 ·Oracle RMAN物理备份技术详解…
 今日更新
 社区讨论
 博客论点
 频道精选
 Oracle频道相关导航