前两天写了一个课程结束时间的统计,要求是有课程所在院系、学生所在院系、课程相关信息以及课程结束时间等信息,其中课程结束时间是以星期做单位,没有太多思考,我很简单地写出了查询的SQL,但是执行效率太低,现将整个SQL的优化过程称述如下:
优化前:
视图一:
sql 代码
- CREATE OR REPLACE VIEW V_A_WEIXM_SUB_BAD
- (TEACHINGCLASSID, TEACHINGCLASSNAME, TERMID, COURSENAME, COURSENO,
- TOTALPERIODNUM, CLASSNO, TERMNAME, DKNAME, STNAME,
- DSNAME, NUM, TEACHER1, TEACHER2, TEACHER3,
- BEGINWEEK, REST, WEEKDAY)
- AS
- select
- distinct a.teachingclassid,a.teachingclassname,a.termid,b.coursename,b.COURSENO,b.TOTALPERIODNUM,
- c.CLASSNO,l.TERMNAME,e.name dkname,h.NAME stname,j.NAME dsname,
- g.num,k.TEACHER1,k.TEACHER2,k.TEACHER3,a.BEGINWEEK,
- (select max(weekno) from caresult where caresult.teachingclassid=a.teachingclassid ) rest,
- decode(
- (
- select weekdayno from
- (
- select distinct max(s.weekdayno) weekdayno,s.teachingclassid from
- (
- select distinct max(weekno) weekno,teachingclassid from caresult group by teachingclassid
- ) m,caresult s
- where m.teachingclassid=s.teachingclassid and m.weekno=s.weekno group by s.teachingclassid
- ) where teachingclassid=a.teachingclassid
- )
- ,1,'星期一',2,'星期二',3,'星期三',4,'星期四',5,'星期五',6,'星期六',0,'星期日') WEEKDAY
- from
- teachingtask a,course b,course_classes c,
- (select distinct classno,count(classno) num from students group by classno)g,
- staffroom h,classes i,
- TEACHERSETTING k,term l,department j,department e
- where
- a.courseid=b.courseid and a.teachingclassid=c.teachingclassid and
- b.departmentid=e.departmentid and b.STAFFROOMID=h.STAFFROOMID and
- c.CLASSNO=i.CLASSNO and i.DEPARTMENTID=j.DEPARTMENTID and
- g.CLASSNO=c.CLASSNO and k.teachingclassid(+)=a.teachingclassid and
- a.TERMID=l.TERMID
- and a.TERMID='t012' order by e.name,h.NAME,b.COURSENO,b.coursename,teachingclassname;
优化后:
视图二:
sql 代码
- CREATE OR REPLACE VIEW V_A_WEIXM_SUB
- (TEACHINGCLASSID, TEACHINGCLASSNAME, TERMID, COURSENAME, COURSENO,
- TOTALPERIODNUM, CLASSNO, TERMNAME, DKNAME, STNAME,
- DSNAME, NUM, TEACHER1, TEACHER2, TEACHER3,
- BEGINWEEK, REST, WEEKDAY)
- AS
- select
- distinct a.teachingclassid,a.teachingclassname,a.termid,b.coursename,b.COURSENO,b.TOTALPERIODNUM,
- c.CLASSNO,l.TERMNAME,e.name dkname,h.NAME stname,j.NAME dsname,
- g.num,k.TEACHER1,k.TEACHER2,k.TEACHER3,a.BEGINWEEK,
- m.weekno rest,
- decode(m.weekdayno,1,'星期一',2,'星期二',3,'星期三',4,'星期四',5,'星期五',6,'星期六',0,'星期日') WEEKDAY
- from
- teachingtask a,course b,course_classes c,
- (select distinct classno,count(classno) num from students group by classno)g,
- staffroom h,classes i,
- (
- select
- a.weekdayno,a.weekno,b.teachingclassid,a.trueflag from
- (select weekdayno,weekno,teachingclassid,(to_number(weekno)*10+to_number(weekdayno)) trueflag from caresult) a,
- (select teachingclassid,max(to_number(weekno)*10+to_number(weekdayno)) checkflag from caresult group by teachingclassid)b
- where b.teachingclassid=a.teachingclassid and b.checkflag=a.trueflag
- ) m,
- TEACHERSETTING k,term l,department j,department e
- where
- a.courseid=b.courseid and a.teachingclassid=c.teachingclassid and
- b.departmentid=e.departmentid and b.STAFFROOMID=h.STAFFROOMID and
- c.CLASSNO=i.CLASSNO and i.DEPARTMENTID=j.DEPARTMENTID and
- g.CLASSNO=c.CLASSNO and k.teachingclassid(+)=a.teachingclassid and
- a.TERMID=l.TERMID and m.teachingclassid(+)=a.teachingclassid
- and a.TERMID='t012' order by e.name,h.NAME,b.COURSENO,b.coursename,teachingclassname;
相关推荐
- **SQL优化机制**: - **SQL语句处理过程**:理解SQL语句在Oracle中的处理流程对于优化至关重要。 - **共享SQL区域**:Oracle会在内存的共享池中缓存已执行过的SQL语句,以便后续执行时可以直接使用而无需重新...
在Oracle数据库环境中,SQL优化是提升系统性能的关键环节。它涉及到如何有效地检索数据,减少查询时间,减轻数据库服务器的负载,以及改善整体系统的响应速度。本文将深入探讨Oracle SQL优化的相关知识点,帮助你...
在Oracle环境中,常用的SQL优化工具包括Oracle SQL Developer、Toad for Oracle、SQL Server Management Studio (尽管它是针对SQL Server的)等。这些工具不仅提供了上述功能,还专门针对Oracle数据库的特性进行了...
在Oracle数据库中,SQL优化是一个至关重要的环节,它能够显著提高数据库查询的效率和性能。本文将详细介绍Oracle SQL中的“提示”(HINT)技术,这是Oracle SQL优化中使用的一项辅助手段,通过为查询提供额外的优化...
SQL优化衡量指标** 性能通常通过响应时间和并发性来衡量。性能不佳可能是由于开发人员对SQL效率的忽视或对SQL执行原理的不了解。优化不仅限于SQL语法和内嵌函数的掌握,还需理解SQL解析和成本基优化器(CBO)的工作...
4. **SQL优化器**:Oracle SQL优化器负责选择最优的执行路径。CBO(Cost-Based Optimizer)基于成本估算选择执行计划,而RBO(Rule-Based Optimizer)基于规则。理解优化器的工作原理,可以帮助我们更好地调整SQL。 ...
Oracle的SQL优化与调优机制复杂多样,涵盖了从SQL语句的编写、执行计划的选择、到资源管理的全方位调优方法。为了深入理解Oracle SQL优化与调优机制,需要掌握以下几个核心知识点。 首先,要掌握Oracle SQL的基本...
性能管理 性能问题 调整的方法 SQL优化机制 应用的调整 SQL语句的处理过程 共享SQL区域 SQL语句处理的阶段 共享游标 SQL编码标准 Oracle 优化器介绍 SQL Tunning Tips 优化Tools
总之,Oracle SQL优化是一个多层面、深度细致的过程,涉及数据库设计、SQL编写、系统配置等多个方面。通过深入理解这些规则,并结合实际业务场景,可以有效地提升SQL执行效率,优化数据库性能。
总结,Oracle SQL优化是一个综合性的过程,涉及到SQL语句的编写、数据库结构的设计、索引的管理和优化器的配置等多个方面。通过对上述策略的理解和应用,可以显著提高Oracle数据库的性能和响应速度,为用户提供更好...
Oracle SQL优化是...综上所述,Oracle SQL优化是一个涵盖广泛领域的过程,涉及数据库设计、SQL编写、执行计划分析等多个层面。通过深入理解这些知识点,并结合实际情况灵活应用,可以显著提升Oracle数据库的性能。
Oracle数据库是全球广泛...Oracle SQL优化是一个复杂而细致的过程,需要结合实际业务场景,综合运用多种技术和策略。通过对SQL的深入理解和优化,我们可以显著提升Oracle数据库的运行效率,确保系统的稳定性和高性能。
SQL语句执行的过程、ORACLE优化器 ,表之间的关联,如何得到SQL执行计划,如何分析执 行计划等内容,从而由浅到深的方式了解SQL优化的过 程,使大家逐步掌握SQL优化。
综上所述,Oracle SQL优化是一个涉及多方面知识的综合过程,需要根据实际业务需求和系统负载进行细致的分析和调整。通过上述方法,我们可以有效地提升SQL的执行效率,从而改善整体系统性能。在实践中,还应结合具体...
本篇将深入探讨“基于Oracle的SQL优化典型案例分析”,旨在帮助数据库管理员和开发人员提升SQL查询效率,降低系统负载,从而提高整体系统性能。 1. **SQL执行计划分析** - Oracle通过执行计划来确定如何执行SQL...
Oracle数据库的高性能SQL优化是数据库管理员和开发人员关注的关键领域,因为它直接影响到系统的响应时间和整体性能。Oracle性能管理是一个持续的过程,包括主动和被动两个方面。主动性能管理强调在系统设计和开发...
Oracle SQL 优化是数据库管理...总的来说,Oracle SQL优化涉及到对数据库行为的深入理解,包括优化器的工作原理、索引的使用策略以及执行计划的选择。通过恰当的配置和调优,可以大大提高数据库系统的性能和响应速度。
### Oracle SQL优化实例详解 #### 一、减少I/O操作 在Oracle数据库中,I/O操作通常是查询执行过程中最耗时的部分之一。因此,减少I/O操作可以显著提高查询性能。 **示例代码:** ```sql SELECT COUNT(CASE WHEN ...