logo 广告
Loading...
 导航 所在位置:论坛首页 -> ┈┋电脑网络┋┈ -> 数据库技术 -> 当数据积累到一定时间后执行会越来越慢
回复
标题:当数据积累到一定时间后执行会越来越慢收藏 编辑 删除 楼主 | 上一篇 下一篇
乖乖女我
头像
等级:社区游民
权限:普通用户
积分:21
金钱:220
声望:22
经验:22
发帖数:54
注册:2008年3月16日
资料 短消息2008-7-25 16:15:48
最近很长一段时间都在优化一个项目,这个项目存在许多问题,从数据架构到工作流

程,我一直在思考一些有关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表数据量加大,会越来越慢!

签名

2008-7-25 16:15:48 顶部
第1页 共页 共0个回复     <<    >>    
 快速回复
  • 支持UBB,HTML标签

  • 高级回复

  • 操作选项:评分 加精 解精 奖惩 设专题 设公告 解公告 固顶 总固顶 解固顶 结帖 解结帖 锁帖 解锁 移帖 删帖
      首页 | 购买指南 | 虚拟主机 | 特色介绍 | 下载中心 | 支付方式
    Copyright 2004-2008 BBSGood.com Powered By: BBSGood.Speed Version 5.0
      咨询电话:0575-85513832、0575-85513825(传真)、7*24小时咨询服务:13606552007 不良信息举报中心 浙ICP备05029817号
      业务QQ:38958768、客服QQ1:415896239、客服QQ2:343896043、MSN:jccsxx@hotmail.com