oracle优化与可持续运行

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

最近很长一段时间都在优化一个项目,这个项目存在许多问题,从数据架构到工作流
程,我一直在思考一些有关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表数据量加大,会越来越慢!


目录
相关文章
|
Oracle 关系型数据库 数据库
|
3月前
|
存储 Oracle 关系型数据库
Oracle存储过程插入临时表优化与慢查询解决方法
优化是一个循序渐进的过程,就像雕刻一座雕像,需要不断地打磨和细化。所以,耐心一点,一步步试验这些方法,最终你将看到那个让你的临时表插入操作如同行云流水、快如闪电的美丽时刻。
152 14
|
8月前
|
SQL Oracle 关系型数据库
如何在 Oracle 中配置和使用 SQL Profiles 来优化查询性能?
在 Oracle 数据库中,SQL Profiles 是优化查询性能的工具,通过提供额外统计信息帮助生成更有效的执行计划。配置和使用步骤包括:1. 启用自动 SQL 调优;2. 手动创建 SQL Profile,涉及收集、执行调优任务、查看报告及应用建议;3. 验证效果;4. 使用 `DBA_SQL_PROFILES` 视图管理 Profile。
|
10月前
|
SQL Oracle 关系型数据库
Oracle数据库优化方法
【10月更文挑战第25天】Oracle数据库优化方法
174 7
|
10月前
|
存储 Oracle 关系型数据库
Oracle数据库优化策略
【10月更文挑战第25天】Oracle数据库优化策略
130 5
|
监控 Oracle 关系型数据库
"深度剖析:Oracle SGA大小调整策略——从组件解析到动态优化,打造高效数据库性能"
【8月更文挑战第9天】在Oracle数据库性能优化中,系统全局区(SGA)的大小调整至关重要。SGA作为一组共享内存区域,直接影响数据库处理能力和响应速度。本文通过问答形式介绍SGA调整策略:包括SGA的组成(如数据缓冲区、共享池等),如何根据负载与物理内存确定初始大小,手动调整SGA的方法(如使用`ALTER SYSTEM`命令),以及利用自动内存管理(AMM)特性实现智能调整。调整过程中需注意监控与测试,确保稳定性和性能。
836 2
|
存储 Oracle 关系型数据库
关系型数据库Oracle运行RMAN脚本
【7月更文挑战第23天】
161 4
|
SQL Oracle 关系型数据库
Oracle游标的使用和优化技巧
Oracle游标的使用和优化技巧
|
SQL Oracle 关系型数据库
Oracle游标的使用和优化技巧
Oracle游标的使用和优化技巧
|
SQL 存储 Oracle
Oracle数据库中游标的工作原理与优化方法
Oracle数据库中游标的工作原理与优化方法