`

Oracle SQL 优化全过程

阅读更多
前两天写了一个课程结束时间的统计,要求是有课程所在院系、学生所在院系、课程相关信息以及课程结束时间等信息,其中课程结束时间是以星期做单位,没有太多思考,我很简单地写出了查询的SQL,但是执行效率太低,现将整个SQL的优化过程称述如下:
 
优化前:
 
视图一:

sql 代码
 
  1. CREATE OR REPLACE VIEW V_A_WEIXM_SUB_BAD   
  2. (TEACHINGCLASSID, TEACHINGCLASSNAME, TERMID, COURSENAME, COURSENO,    
  3.  TOTALPERIODNUM, CLASSNO, TERMNAME, DKNAME, STNAME,    
  4.  DSNAME, NUM, TEACHER1, TEACHER2, TEACHER3,    
  5.  BEGINWEEK, REST, WEEKDAY)   
  6. AS    
  7. select    
  8.     distinct a.teachingclassid,a.teachingclassname,a.termid,b.coursename,b.COURSENO,b.TOTALPERIODNUM,    
  9.     c.CLASSNO,l.TERMNAME,e.name dkname,h.NAME stname,j.NAME dsname,    
  10.     g.num,k.TEACHER1,k.TEACHER2,k.TEACHER3,a.BEGINWEEK,    
  11.     (select max(weekno) from caresult where caresult.teachingclassid=a.teachingclassid ) rest,    
  12.     decode(   
  13.  (   
  14.  select weekdayno from    
  15.  (   
  16.      select distinct max(s.weekdayno) weekdayno,s.teachingclassid from    
  17.      (   
  18.          select distinct max(weekno) weekno,teachingclassid from caresult group by teachingclassid    
  19.      ) m,caresult s    
  20.      where m.teachingclassid=s.teachingclassid and m.weekno=s.weekno group by s.teachingclassid   
  21.  ) where teachingclassid=a.teachingclassid   
  22.  )   
  23.   ,1,'星期一',2,'星期二',3,'星期三',4,'星期四',5,'星期五',6,'星期六',0,'星期日') WEEKDAY    
  24. from    
  25.     teachingtask a,course b,course_classes c,    
  26.     (select distinct classno,count(classno) num from students group by classno)g,    
  27.     staffroom h,classes i,     
  28.     TEACHERSETTING k,term l,department j,department e    
  29. where    
  30.     a.courseid=b.courseid and a.teachingclassid=c.teachingclassid and    
  31.     b.departmentid=e.departmentid and b.STAFFROOMID=h.STAFFROOMID and    
  32.     c.CLASSNO=i.CLASSNO and i.DEPARTMENTID=j.DEPARTMENTID and    
  33.     g.CLASSNO=c.CLASSNO and k.teachingclassid(+)=a.teachingclassid and    
  34.     a.TERMID=l.TERMID     
  35.     and a.TERMID='t012' order by e.name,h.NAME,b.COURSENO,b.coursename,teachingclassname;  

 
 
 
优化后:
 
视图二:

sql 代码
 
  1. CREATE OR REPLACE VIEW V_A_WEIXM_SUB   
  2. (TEACHINGCLASSID, TEACHINGCLASSNAME, TERMID, COURSENAME, COURSENO,    
  3.  TOTALPERIODNUM, CLASSNO, TERMNAME, DKNAME, STNAME,    
  4.  DSNAME, NUM, TEACHER1, TEACHER2, TEACHER3,    
  5.  BEGINWEEK, REST, WEEKDAY)   
  6. AS    
  7. select    
  8.     distinct a.teachingclassid,a.teachingclassname,a.termid,b.coursename,b.COURSENO,b.TOTALPERIODNUM,    
  9.     c.CLASSNO,l.TERMNAME,e.name dkname,h.NAME stname,j.NAME dsname,    
  10.     g.num,k.TEACHER1,k.TEACHER2,k.TEACHER3,a.BEGINWEEK,    
  11.     m.weekno rest,    
  12.     decode(m.weekdayno,1,'星期一',2,'星期二',3,'星期三',4,'星期四',5,'星期五',6,'星期六',0,'星期日') WEEKDAY    
  13. from    
  14.     teachingtask a,course b,course_classes c,    
  15.     (select distinct classno,count(classno) num from students group by classno)g,    
  16.     staffroom h,classes i,    
  17.     (    
  18.         select    
  19.             a.weekdayno,a.weekno,b.teachingclassid,a.trueflag from  
  20.             (select weekdayno,weekno,teachingclassid,(to_number(weekno)*10+to_number(weekdayno)) trueflag from caresult) a,    
  21.             (select teachingclassid,max(to_number(weekno)*10+to_number(weekdayno)) checkflag from caresult group by teachingclassid)b    
  22.         where b.teachingclassid=a.teachingclassid and b.checkflag=a.trueflag    
  23.     ) m,    
  24.     TEACHERSETTING k,term l,department j,department e    
  25. where    
  26.     a.courseid=b.courseid and a.teachingclassid=c.teachingclassid and    
  27.     b.departmentid=e.departmentid and b.STAFFROOMID=h.STAFFROOMID and    
  28.     c.CLASSNO=i.CLASSNO and i.DEPARTMENTID=j.DEPARTMENTID and    
  29.     g.CLASSNO=c.CLASSNO and k.teachingclassid(+)=a.teachingclassid and    
  30.     a.TERMID=l.TERMID  and m.teachingclassid(+)=a.teachingclassid    
  31.     and a.TERMID='t012' order by e.name,h.NAME,b.COURSENO,b.coursename,teachingclassname;  


 
分享到:
评论
1 楼 jelver 2008-01-02  
没有注释的代码对很多人来说,这是段垃圾,建议养成注释的习惯,否则哪天自己看都费劲,我就看不下去了!

相关推荐

    oracle sql优化

    在Oracle数据库环境中,SQL优化是提升系统性能的关键环节。它涉及到如何有效地检索数据,减少查询时间,减轻数据库服务器的负载,以及改善整体系统的响应速度。本文将深入探讨Oracle SQL优化的相关知识点,帮助你...

    SQL优化 SQL优化软件 SQL优化工具

    在Oracle环境中,常用的SQL优化工具包括Oracle SQL Developer、Toad for Oracle、SQL Server Management Studio (尽管它是针对SQL Server的)等。这些工具不仅提供了上述功能,还专门针对Oracle数据库的特性进行了...

    Oracle SQL 优化与调优技术详解-附录:SQL提示

    在Oracle数据库中,SQL优化是一个至关重要的环节,它能够显著提高数据库查询的效率和性能。本文将详细介绍Oracle SQL中的“提示”(HINT)技术,这是Oracle SQL优化中使用的一项辅助手段,通过为查询提供额外的优化...

    ORACLE_SQL性能优化(全).ppt

    SQL优化衡量指标** 性能通常通过响应时间和并发性来衡量。性能不佳可能是由于开发人员对SQL效率的忽视或对SQL执行原理的不了解。优化不仅限于SQL语法和内嵌函数的掌握,还需理解SQL解析和成本基优化器(CBO)的工作...

    ORACLESQL性能优化全PPT教案.pptx

    4. **SQL优化器**:Oracle SQL优化器负责选择最优的执行路径。CBO(Cost-Based Optimizer)基于成本估算选择执行计划,而RBO(Rule-Based Optimizer)基于规则。理解优化器的工作原理,可以帮助我们更好地调整SQL。 ...

    ORACLE-SQL性能优化大全.pdf

    - **SQL优化机制**: - **SQL语句处理过程**:理解SQL语句在Oracle中的处理流程对于优化至关重要。 - **共享SQL区域**:Oracle会在内存的共享池中缓存已执行过的SQL语句,以便后续执行时可以直接使用而无需重新...

    高清完整版 Oracle 高性能SQL引擎剖析SQL优化与调优机制详解

    Oracle的SQL优化与调优机制复杂多样,涵盖了从SQL语句的编写、执行计划的选择、到资源管理的全方位调优方法。为了深入理解Oracle SQL优化与调优机制,需要掌握以下几个核心知识点。 首先,要掌握Oracle SQL的基本...

    老方块ORACLE SQL性能优化(全)教学PPT

    性能管理 性能问题 调整的方法 SQL优化机制 应用的调整 SQL语句的处理过程 共享SQL区域 SQL语句处理的阶段 共享游标 SQL编码标准 Oracle 优化器介绍 SQL Tunning Tips 优化Tools

    Oracle SQL优化法则

    总之,Oracle SQL优化是一个多层面、深度细致的过程,涉及数据库设计、SQL编写、系统配置等多个方面。通过深入理解这些规则,并结合实际业务场景,可以有效地提升SQL执行效率,优化数据库性能。

    Oracle Sql 优化

    总结,Oracle SQL优化是一个综合性的过程,涉及到SQL语句的编写、数据库结构的设计、索引的管理和优化器的配置等多个方面。通过对上述策略的理解和应用,可以显著提高Oracle数据库的性能和响应速度,为用户提供更好...

    OracleSQL优化全资料

    Oracle SQL优化是...综上所述,Oracle SQL优化是一个涵盖广泛领域的过程,涉及数据库设计、SQL编写、执行计划分析等多个层面。通过深入理解这些知识点,并结合实际情况灵活应用,可以显著提升Oracle数据库的性能。

    oracle之SQL优化

    Oracle数据库是全球广泛...Oracle SQL优化是一个复杂而细致的过程,需要结合实际业务场景,综合运用多种技术和策略。通过对SQL的深入理解和优化,我们可以显著提升Oracle数据库的运行效率,确保系统的稳定性和高性能。

    ORACLE_SQL性能优化(这个很全的)

    SQL语句执行的过程、ORACLE优化器 ,表之间的关联,如何得到SQL执行计划,如何分析执 行计划等内容,从而由浅到深的方式了解SQL优化的过 程,使大家逐步掌握SQL优化。

    Oracle SQL优化

    综上所述,Oracle SQL优化是一个涉及多方面知识的综合过程,需要根据实际业务需求和系统负载进行细致的分析和调整。通过上述方法,我们可以有效地提升SQL的执行效率,从而改善整体系统性能。在实践中,还应结合具体...

    基于Oracle的SQL优化典型案例分

    本篇将深入探讨“基于Oracle的SQL优化典型案例分析”,旨在帮助数据库管理员和开发人员提升SQL查询效率,降低系统负载,从而提高整体系统性能。 1. **SQL执行计划分析** - Oracle通过执行计划来确定如何执行SQL...

    Oracle 高性能SQL优化

    Oracle数据库的高性能SQL优化是数据库管理员和开发人员关注的关键领域,因为它直接影响到系统的响应时间和整体性能。Oracle性能管理是一个持续的过程,包括主动和被动两个方面。主动性能管理强调在系统设计和开发...

    oracle sql优化语句

    Oracle SQL 优化是数据库管理...总的来说,Oracle SQL优化涉及到对数据库行为的深入理解,包括优化器的工作原理、索引的使用策略以及执行计划的选择。通过恰当的配置和调优,可以大大提高数据库系统的性能和响应速度。

    oracle SQL优化实例

    ### Oracle SQL优化实例详解 #### 一、减少I/O操作 在Oracle数据库中,I/O操作通常是查询执行过程中最耗时的部分之一。因此,减少I/O操作可以显著提高查询性能。 **示例代码:** ```sql SELECT COUNT(CASE WHEN ...

Global site tag (gtag.js) - Google Analytics