`
zheng0324jian
  • 浏览: 182165 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Oracle多表查询的优化

阅读更多

1,重复性查询:

当你向oracle提供一个sql的时候,oracle会首先在相应的内存中查找这条语句,如果匹配到,就能直接返回结果,这样就能节省内存和提高数据访问效率。但是匹配sql语句需要注意以下几点:

(1)字符级的比较:sql语句和共享池中的语句必须完全相同才能匹配完整,尤其注意大小写和空格

(2)两个语句所指的对象必须完全相同,就是说sql语句共享是区分用户的,两个用户的公共对象才能共享sql

(3)sql语句中必须使用相同的名字的绑定变量

2,表名顺序对效率的影响:oracle是从右到左的顺序解析from字句中的表名

例如表A中有 1500条数据,B中有1条数据

低效率:select count(*) from B,A

高效率:select count(*) from A,B

3,三个以上的表连接查询,就需要选择交叉表作为基础表

低效率:select * from E,A,B

            where E.x = xxx

            and E.y = A.y

            and E.z = B.z

高效率:select * from A,B,E

            where E.x = xxx

            and E.y = A.y

            and E.z = B.z

4,where子句中的连接顺序:oracle采用自上而下的顺序解析where子句,所以表之间的连接一定写在其他的条件之前,

那些可以过滤掉最带数据量的条件要放在末尾

低效率:select xxx

            from EMP e

            where sal > 5000

                      and job = 'manager'

                      and 管理人数>20

高效率:select xxx

            from EMP e

            where 管理人数>20

                      and al > 5000

                      and job = 'manager'

5,select子句中避免使用*:实际上,oracle在解析的过程中,会将“*”依次转换成所有的列名

6,尽量减少访问数据库的次数

7,decode函数的使用能减少处理时间:decode(参数,匹配值1,返回值1,匹配值2,返回值2。。。默认值)

例:select type ,decode(blood_test_flag,'Y','Yes','N','No',null,'None','Invalid') from A;

使用实例:

低效率:             

               select count(*) ,sum(sal) from emp

               where dept_no = 1

               and ename like 'zj';

               select count(*) ,sum(sal) from emp

               where dept_no = 2

               and ename like 'zj';

高效率:             

               select count(decode(dept_no,1,'x',null)) count_1,

                         count(decode(dept_no,2,'x',null)) count_2,

                         sum(decode(dept_no,1,sal,null)) sal_1,

                         sum(decode(dept_no,2,sal,null)) sal_2

               from emp

               where ename like 'zj';

8,删除重复记录

最高效删除重复记录的方法(使用rowID)

delete from emp e

where e.rowid > (

      select min(x.rowid)

      from emp x

      where x.emp_no = e.emp_no

);

9,update语句

低效率:update A set a = 1,b=2 where id = 01;

高效率:update A set (a ,b)=(1,2) where id = 01;

10,用exist代替IN

低效率:select * from emp

            where  empno > 0

                  and  empno in (

                  select deptno

                  from dept

                  where loc = 'melg'

            )

高效率:select * from emp

            where empno > 0

                      and exists (

                          select  'x' from dept

                          where dept.deptno = emp.deptno

                                    and loc = 'melg'

                       )

 

11,识别’低效率执行‘的sql语句

可以使用下面的sql语句查询出低效sql:

select executions ,disk_reads,buffer_gets,

          round((buffer_gets-disk_reads)/buffer_gets,2) hit_radio.

          round(disk_reads/executions,2)reads_per_run,

          sql_text

from v$sqlarea

where executions>0

          and buffer_gets>0

          and (buffer_gets-disk_reads)/buffer_gets<0.8

group by 4 desc;

分享到:
评论

相关推荐

    ORACLE多表查询优化

    Oracle 多表查询优化需要考虑多个方面,包括选择合适的表名顺序、使用 Cache Buffer、语句共享、优化查询路径、避免多表连接查询、优化数据统计、选择合适的索引、优化数据库结构、使用 Materialized View、优化...

    Oracle 多表查询优化

    Oracle 多表查询优化 Oracle 多表查询优化是指在 Oracle 数据库管理系统中,为了提高多表查询的效率和性能采取的一些优化策略和技术。在 Oracle 中,多表查询是指从多个表中检索数据的操作。这种操作可能会占用大量...

    Oracle数据库中大型表查询优化的研究

    综上所述,Oracle数据库中大型表查询优化涉及多个方面,包括索引优化、查询设计、工具利用、分区技术和数据库配置。每个环节都需要根据具体情况进行细致分析和调整,以实现最佳的查询性能。在实际操作中,应结合实际...

    【oracle】oracle查询优化改写

    例如,通过使用连接(JOIN)操作的优化,可以避免全表扫描,提高多表联查的效率。此外,子查询优化可能包括子查询消除、子查询合并或子查询物化,以减少查询的复杂性和提高执行速度。 优化器是Oracle处理SQL查询的...

    ORACLE中SQL查询优化技术

    - **索引统计信息更新**:定期更新索引统计信息可以帮助Oracle优化器更准确地评估查询成本。 ##### 2. 调整SQL语句结构 - **避免SELECT ***:明确指定需要查询的字段而不是使用`SELECT *`,以减少不必要的数据传输...

    关于Oracle多表连接,提高效率,性能优化操作

    这是因为ORACLE只对简单的表提供高速缓冲(cache buffering) ,这个功能并不适用于多表连接查询..数据库管理员必须在init.ora中为这个区域设置合适的参数,当这个内存区域越大,就可以保留更多的语句,当然被共享的可能性...

    oracle全表扫描的3种优化手段

    ### Oracle全表扫描的三种优化手段 在Oracle数据库管理中,全表扫描(Full Table Scan,简称FTS)是指查询语句对整个表的数据进行读取的一种操作方式。当索引选择性较差或者表较小的时候,Oracle可能会选择全表扫描...

    Oracle数据库的查询优化

    ### Oracle数据库的查询优化 #### 一、何时需要考虑查询优化 在开发应用程序时,编写高效、优化的SQL语句对于提升系统性能至关重要。当遇到以下情况时,应该重点考虑查询优化: - **表连接**: 当查询涉及到多张表...

    Oracle查询优化改写 技巧与案例.pdf

    Oracle查询优化是数据库管理中的重要环节,...总之,Oracle查询优化涉及到多方面的知识点和实际操作技巧。本文件通过介绍具体的优化技巧和案例分析,帮助读者理解并掌握这些技术,以提高Oracle数据库查询的效率和性能。

    Oracle查询优化改写技巧与案例

    《Oracle查询优化改写技巧与案例》不讲具体语法,只是以案例的形式介绍各种查询语句的用法。第1~4章是基础部分,讲述了常用的各种基础语句,以及常见的错误和正确语句的写法。这部分的内容应熟练掌握,因为日常查询...

    Oracle查询优化改写技巧与案例2.zip

    《Oracle查询优化改写技巧与案例》不讲具体语法,只是以案例的形式介绍各种查询语句的用法。第1~4章是基础部分,讲述了常用的各种基础语句,以及常见的错误和正确语句的写法。这部分的内容应熟练掌握,因为日常查询...

    Oracle查询优化改写-技巧与案例

    书中可能会讲解何时创建B树索引、位图索引、函数索引,以及如何利用复合索引来优化多列查询。同时,也可能会讨论索引的维护和优化,如重建索引、合并索引等。 3. **连接优化**:在处理多个表的联接查询时,优化JOIN...

    Oracle数据库查询优化的方法

    本文重点分析Oracle数据库索引及临时表在查询中的应用,并探讨了基于索引使用SQL语句进行数据库效率优化的几种实现方法。 在Oracle数据库中,索引的合理运用能够显著提升查询速度,减少I/O操作,避免磁盘排序。通常...

    oracle 查询优化改写

    总结,Oracle查询优化改写是一个涉及多方面技能的综合过程。理解数据库内部工作原理,结合实际业务场景,通过索引调整、查询改写、并行查询、临时表使用等手段,可以显著提升数据库性能。实践中,应持续监控和分析...

    《Oracle查询优化改写技巧与案例》PDF版本下载.txt

    根据提供的文件信息,本文将对《Oracle查询优化改写技巧与案例》这一主题进行详细的解析,涵盖Oracle查询优化的基本概念、重要性、改写技巧及其实际应用案例。 ### 一、Oracle查询优化概述 #### 1.1 查询优化定义 ...

    Oracle 的查询优化

    在本文中,我们将深入探讨 Oracle 中的查询优化技术,包括表的各种连接方式、子查询优化、窗口函数的应用、视图消除、并行执行技术等。 一、Oracle 中的查询优化技术 Oracle 中的查询优化技术可以分为以下几类: ...

    oracle查询优化pdf

    最后,Oracle的并发控制机制,如锁定和多版本并发控制(MVCC),在处理并发查询时起着关键作用。了解并正确使用这些机制,可以避免死锁,减少锁竞争,提高系统并发性能。 “Oracle查询优化PDF”可能会详细讲解这些...

    oracle9i的查询优化

    ### Oracle9i的查询优化深度解析 #### 引言 Oracle9i的查询优化是数据库管理系统中的关键组件,它能够显著提升SQL查询的执行效率,从而优化整个数据库系统的性能。查询优化器通过智能分析和调整SQL语句的执行计划...

Global site tag (gtag.js) - Google Analytics