`
linbaoli
  • 浏览: 2361 次
社区版块
存档分类
最新评论

Oracle查询优化1

 
阅读更多
Oracle查询优化
SQL 执行的步骤
 解析:安全性检查,语法检查;
 创建:评估多个执行计划,并选择一个最优的执行计划;
 执行:捆绑变量,执行已经创建的执行计划;
 获取:获取结果集,进行转换,排序等
 常见可能导致全表扫描的操作
 使用null条件的查询:where xxx is null;
 对没有索引的字段查询;
 带有like条件的查询:where xxx like ‘%x’;
 带有not equals条件的查询:<> , !=, not in等
 内置函数使索引无效:substr(),to_char()等;
 使用all_rows提示;
 使用parallel 提示;
SQL 调整的目标
 去掉不必要的大表全表扫描;
 缓存小表全表扫描;
 尽量使用主机变量代替直接量,减少SQL语句的解析时间;
 优化索引的使用;
 优化表连接方法;
 优化子查询;
调整SQL子查询
 标准子查询:in 和 exists;
 反连接子查询:not in 和 not exists;
 关联子查询:指在子查询内部引用外部数据表;…from table1 a where … (select…from table2 b Where a.f1 = b.f1…);对于外部数据集的每一条记录,都将重新执行一次内部子查询;
 非关联子查询:指在子查询内部不会引用外部的数据表;…from table1 a where … (select …from table2 b …);内部子查询只执行一次;
 调整SQL子查询
 只要可能的话,尽可能的避免使用子查询,而用标准的连接操作来代替,这样可以使用提示来更改执行计划;
 先考虑子查询的合法性,再考虑进行改写;
 使用一个关联子查询时,in与exists子句的子查询的执行计划基本相同;
 在外部查询返回相对较少的记录时,关联子查询比非关联子查询执行得更快;
调整SQL子查询
 在内部子查询只有少量的记录时,非关联子查询比关联子查询执行得更快;
 关联子查询使用in子句是多余的;而非关联子查询使用exists子句是不恰当的。
 使用in子句的非关联子查询可以转换为标准连接操作以及使用select distinct来删除重复的记录;
 使用exists子句的关联子查询可以转换为标准连接,但子查询最好只能返回一个记录;
 使用not in子句的非关联子查询可以转sql minus子句,性能相对会高一些;
 使用not in子句的关联子查询,可以使用带有select distinct子句的外部连接操作改写;
ORACLE提示
 http://ymy131931.iteye.com/blog/1998888
常见优化举例
 select num from a where num in (select num from b where b.num/2 > 100)
union
select num from c where num = 10 or num = 20 or num =30;
 MERGE:
 MERGE INTO TABLE_NAME A
 USING TABLE_NAME B
 ON (A.XXX = B.XXX)   /*两表的关联条件*/
 WHEN MATCHED THEN
 UPDATE SET A.XXX=…… (WHERE ……)
 DELETE WHERE ……
 WHEN NOT MATCHED THEN
 INSERT ……;
 如果UPDATE后面跟随着DELETE 则UPDATE 后绝对不能有WHERE语句,否则DELETE 失效
 MERGE
 CREATE TABLE TEAT_A (NUM NUMBER(3),A_ID VARCHAR2 (6));
 CREATE TABLE TEAT_B (NUM NUMBER(3),B_ID VARCHAR2 (6));
 INSERT INTO TEST_A VALUES (1,'001');
 INSERT INTO TEST_A VALUES (2,'001');
 INSERT INTO TEST_A VALUES (3,'001');
 INSERT INTO TEST_A VALUES (3,'002');
 INSERT INTO TEST_A VALUES (4,'001');
 INSERT INTO TEST_A VALUES (5,'002');
 MERGE
 SQL> MERGE INTO TEST_A A
   2  USING (SELECT NUM,B_ID FROM TEST_B) B
   3  ON (A.A_ID = B.B_ID)
   4  WHEN MATCHED THEN
   5  UPDATE SET A.NUM = B.NUM
   6  DELETE WHERE B.B_ID = '002'
   7  WHEN NOT MATCHED THEN
   8  INSERT VALUES
   9  (B.NUM,B.B_ID);
行列转换——列转行
 OARCLE 用户WMSYS下的WM_CONCAT();
例:SELECT WMSYS.WM_CONCAT(NUM) FROM TEST_A;
 CASE WHEN END
例: SELECT JOB ,
  SUM(CASE DEPTNO WHEN 10 THEN SAL END) SAL_10,
  SUM(CASE DEPTNO WHEN 20 THEN SAL END) SAL_20,
  SUM(CASE DEPTNO WHEN 30 THEN SAL END) SAL_30,
  SUM(SAL) HJ
  FROM EMP
  GROUP BY JOB;
 select * from emp pivot(sum(sal) as sum_sal for(DEPTNO) in (10,20,30));
行列转换——列转行
 SELECT * FROM (SELECT SAL, DEPTNO FROM EMP) PIVOT(SUM(SAL) AS PI_SAL FOR DEPTNO IN('10','20','30'));
 SELECT "备件名" AS A,
LISTAGG("仓库名", '--') WITHIN GROUP(ORDER BY "备件名") AS B
FROM TEST_5
GROUP BY "备件名"
行列转行——行转列
SELECT *
FROM VIEW_1 UNPIVOT(A FOR B IN("'10'_PI_SAL",
"'20'_PI_SAL",
"'30'_PI_SAL"));
分享到:
评论

相关推荐

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

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

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

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

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

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

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

    1. **查询优化基础**:优化SQL查询始于理解Oracle的执行计划。书中可能涵盖了如何使用`EXPLAIN PLAN`或` autotrace`来分析查询执行路径,以及如何解读执行计划中的各个阶段,如全表扫描、索引查找等。 2. **索引...

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

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

    【oracle】oracle查询优化改写

    在Oracle中,查询优化主要依赖于查询改写和优化器的选择。 查询改写是Oracle数据库优化策略的一部分,它允许数据库在执行查询前对SQL语句进行重写,以选择更高效的方式。这通常涉及利用索引、连接顺序调整、子查询...

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

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

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

    Oracle查询优化是数据库管理中的关键环节,尤其是在大型企业级应用中,高效的查询性能直接影响到系统的整体性能和用户体验。Oracle数据库提供了多种工具和技术来帮助我们优化SQL查询,提高数据检索速度,减少资源...

    oracle查询优化pdf

    Oracle查询优化是数据库管理中的关键环节,它涉及到提高数据检索速度、降低系统资源消耗和提升整体应用性能。这本书“Oracle查询优化PDF”很可能是对Oracle数据库查询优化技术的深入探讨,涵盖了一系列相关主题,...

    Oracle查询优化改写 技巧与案例_高清带书签版本

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

    Oracle 多表查询优化

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

    Oracle查询优化技巧

    Oracle查询的优化技巧,对大数据量查询的时候可以节省不少时间。

    oracle查询优化

    ### Oracle 查询优化详解 在数据库管理系统中,Oracle是一款非常成熟且功能强大的关系型数据库系统,广泛应用于企业级应用。为了提高系统的性能与响应速度,进行有效的Oracle查询优化至关重要。本文将从多个方面...

    Oracle 查询优化,个人练习

    Oracle查询优化是数据库管理中的关键技能,尤其是在处理大型数据集时,有效的查询优化能显著提升系统性能,降低资源消耗。本实践主要关注如何利用Oracle数据库的特性与工具来改进SQL查询的执行效率。 首先,了解...

    oracle 查询优化改写

    在Oracle数据库管理中,查询优化是一项至关重要的任务,它直接影响到数据库系统的性能和效率。"Oracle查询优化改写"是一个专业领域,旨在通过调整SQL语句的结构和逻辑,提高查询速度,降低资源消耗,从而提升整体...

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

    在Oracle数据库管理中,查询优化是一项至关重要的任务,它直接影响到系统的性能和效率。Oracle查询优化改写技巧与案例涉及到如何通过改进SQL语句、利用索引、调整表设计和数据库参数来提升查询速度,降低资源消耗。...

Global site tag (gtag.js) - Google Analytics