优化前:表连接使用merge

SQL> alter session set statistics_level=all;

Session altered.

SQL> select e.sal,d.dname from (select deptno,sum(sal) sal from emp group by deptno) e,dept d where d.deptno=e.deptno;

       SAL DNAME
---------- --------------
8750 ACCOUNTING
10875 RESEARCH
9400 SALES SQL> select * from table(dbms_xplan.display_cursor(null,null,'allstats +alias +outline')); PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
SQL_ID g2kzsydh3kmmq, child number 0
-------------------------------------
select e.sal,d.dname from (select deptno,sum(sal) sal from emp group by deptno) e,dept d where d.deptno=e.deptno Plan hash value: 2992795152 -----------------------------------------------------------------------------------------------------------------------------
| Id | Operation | Name | Starts | E-Rows | A-Rows | A-Time | Buffers | OMem | 1Mem | O/1/M |
-----------------------------------------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 2 | | 6 |00:00:00.01 | 20 | | | |
| 1 | MERGE JOIN | | 2 | 3 | 6 |00:00:00.01 | 20 | | | |
| 2 | TABLE ACCESS BY INDEX ROWID| DEPT | 2 | 4 | 8 |00:00:00.01 | 8 | | | |
| 3 | INDEX FULL SCAN | PK_DEPT | 2 | 4 | 8 |00:00:00.01 | 4 | | | |
|* 4 | SORT JOIN | | 8 | 3 | 6 |00:00:00.01 | 12 | 2048 | 2048 | 2/0/0|
| 5 | VIEW | | 2 | 3 | 6 |00:00:00.01 | 12 | | | |
| 6 | HASH GROUP BY | | 2 | 3 | 6 |00:00:00.01 | 12 | 1214K| 1214K| 2/0/0|
| 7 | TABLE ACCESS FULL | EMP | 2 | 14 | 28 |00:00:00.01 | 12 | | | |
----------------------------------------------------------------------------------------------------------------------------- Query Block Name / Object Alias (identified by operation id):
------------------------------------------------------------- 1 - SEL$1
2 - SEL$1 / D@SEL$1
3 - SEL$1 / D@SEL$1
5 - SEL$2 / E@SEL$1
6 - SEL$2
7 - SEL$2 / EMP@SEL$2 Outline Data
------------- /*+
BEGIN_OUTLINE_DATA
IGNORE_OPTIM_EMBEDDED_HINTS
OPTIMIZER_FEATURES_ENABLE('11.2.0.4')
DB_VERSION('11.2.0.4')
ALL_ROWS
OUTLINE_LEAF(@"SEL$2")
OUTLINE_LEAF(@"SEL$1")
INDEX(@"SEL$1" "D"@"SEL$1" ("DEPT"."DEPTNO"))
NO_ACCESS(@"SEL$1" "E"@"SEL$1")
LEADING(@"SEL$1" "D"@"SEL$1" "E"@"SEL$1")
USE_MERGE(@"SEL$1" "E"@"SEL$1")
FULL(@"SEL$2" "EMP"@"SEL$2")
USE_HASH_AGGREGATION(@"SEL$2")
END_OUTLINE_DATA
*/ Predicate Information (identified by operation id):
--------------------------------------------------- 4 - access("D"."DEPTNO"="E"."DEPTNO")
filter("D"."DEPTNO"="E"."DEPTNO") 56 rows selected. SQL>

将上面的执行计划中的merge改为hash连接,使用hint再次执行:

SQL> select   /*+
2 BEGIN_OUTLINE_DATA
3 IGNORE_OPTIM_EMBEDDED_HINTS
4 OPTIMIZER_FEATURES_ENABLE('11.2.0.4')
5 DB_VERSION('11.2.0.4')
6 ALL_ROWS
7 OUTLINE_LEAF(@"SEL$2")
8 OUTLINE_LEAF(@"SEL$1")
9 INDEX(@"SEL$1" "D"@"SEL$1" ("DEPT"."DEPTNO"))
10 NO_ACCESS(@"SEL$1" "E"@"SEL$1")
11 LEADING(@"SEL$1" "D"@"SEL$1" "E"@"SEL$1")
12 USE_HASH(@"SEL$1" "E"@"SEL$1")
13 FULL(@"SEL$2" "EMP"@"SEL$2")
14 USE_HASH_AGGREGATION(@"SEL$2")
15 END_OUTLINE_DATA
16 */ e.sal,d.dname from (select deptno,sum(sal) sal from emp group by deptno) e,dept d where d.deptno=e.deptno; SAL DNAME
---------- --------------
9400 SALES
10875 RESEARCH
8750 ACCOUNTING SQL> select * from table(dbms_xplan.display_cursor(null,null,'allstats +alias +outline')); PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
SQL_ID 5sns096pbcwj8, child number 0
-------------------------------------
select /*+ BEGIN_OUTLINE_DATA IGNORE_OPTIM_EMBEDDED_HINTS
OPTIMIZER_FEATURES_ENABLE('11.2.0.4')
DB_VERSION('11.2.0.4') ALL_ROWS OUTLINE_LEAF(@"SEL$2")
OUTLINE_LEAF(@"SEL$1") INDEX(@"SEL$1" "D"@"SEL$1"
("DEPT"."DEPTNO")) NO_ACCESS(@"SEL$1" "E"@"SEL$1")
LEADING(@"SEL$1" "D"@"SEL$1" "E"@"SEL$1") USE_HASH(@"SEL$1"
"E"@"SEL$1") FULL(@"SEL$2" "EMP"@"SEL$2")
USE_HASH_AGGREGATION(@"SEL$2") END_OUTLINE_DATA */
e.sal,d.dname from (select deptno,sum(sal) sal from emp group by
deptno) e,dept d where d.deptno=e.deptno Plan hash value: 208030399 -----------------------------------------------------------------------------------------------------------------------------
| Id | Operation | Name | Starts | E-Rows | A-Rows | A-Time | Buffers | OMem | 1Mem | O/1/M |
-----------------------------------------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | | 3 |00:00:00.01 | 8 | | | |
|* 1 | HASH JOIN | | 1 | 3 | 3 |00:00:00.01 | 8 | 1599K| 1599K| 1/0/0|
| 2 | TABLE ACCESS BY INDEX ROWID| DEPT | 1 | 4 | 4 |00:00:00.01 | 2 | | | |
| 3 | INDEX FULL SCAN | PK_DEPT | 1 | 4 | 4 |00:00:00.01 | 1 | | | |
| 4 | VIEW | | 1 | 3 | 3 |00:00:00.01 | 6 | | | |
| 5 | HASH GROUP BY | | 1 | 3 | 3 |00:00:00.01 | 6 | 1214K| 1214K| 1/0/0|
| 6 | TABLE ACCESS FULL | EMP | 1 | 14 | 14 |00:00:00.01 | 6 | | | |
----------------------------------------------------------------------------------------------------------------------------- Query Block Name / Object Alias (identified by operation id):
------------------------------------------------------------- 1 - SEL$1
2 - SEL$1 / D@SEL$1
3 - SEL$1 / D@SEL$1
4 - SEL$2 / E@SEL$1
5 - SEL$2
6 - SEL$2 / EMP@SEL$2 Outline Data
------------- /*+
BEGIN_OUTLINE_DATA
IGNORE_OPTIM_EMBEDDED_HINTS
OPTIMIZER_FEATURES_ENABLE('11.2.0.4')
DB_VERSION('11.2.0.4')
ALL_ROWS
OUTLINE_LEAF(@"SEL$2")
OUTLINE_LEAF(@"SEL$1")
INDEX(@"SEL$1" "D"@"SEL$1" ("DEPT"."DEPTNO"))
NO_ACCESS(@"SEL$1" "E"@"SEL$1")
LEADING(@"SEL$1" "D"@"SEL$1" "E"@"SEL$1")
USE_HASH(@"SEL$1" "E"@"SEL$1")
FULL(@"SEL$2" "EMP"@"SEL$2")
USE_HASH_AGGREGATION(@"SEL$2")
END_OUTLINE_DATA
*/ Predicate Information (identified by operation id):
--------------------------------------------------- 1 - access("D"."DEPTNO"="E"."DEPTNO") 62 rows selected. SQL>

针对该sql,在创建新的profile。

根据执行计划优化sql语句的更多相关文章

  1. ORACLE 查看有多个执行计划的SQL语句

    在SQL优化过程,有时候需要查看哪些SQL具有多个执行计划(Multiple Executions Plans for the same SQL statement),因为同一个SQL有多个执行计划一 ...

  2. 利用pl/sql执行计划评估SQL语句的性能简析

    一段SQL代码写好以后,可以通过查看SQL的执行计划,初步预测该SQL在运行时的性能好坏,尤其是在发现某个SQL语句的效率较差时,我们可以通过查看执行计划,分析出该SQL代码的问题所在.  那么,作为 ...

  3. Postgresql_根据执行计划优化SQL

    执行计划路径选择 postgresql查询规划过程中,查询请求的不同执行方案是通过建立不同的路径来表达的,在生成许多符合条件的路径之后,要从中选择出代价最小的路径,把它转化为一个计划,传递给执行器执行 ...

  4. 使用plsql执行计划进行sql调优(转载)

    一段SQL代码写好以后,可以通过查看SQL的执行计划,初步预测该SQL在运行时的性能好坏,尤其是在发现某个SQL语句的效率较差时,我们可以通过查看执行计划,分析出该SQL代码的问题所在. 那么,作为开 ...

  5. 应用索引技术优化SQL 语句(转)

    原文出处 一.前言 很多数据库系统性能不理想是因为系统没有经过整体优化,存在大量性能低下的SQL 语句.这类SQL语句性能不好的首要原因是缺乏高效的索引.没有索引除了导致语句本身运行速度慢外,更是导致 ...

  6. 使用V$SQL_PLAN视图获取曾经执行过的SQL语句执行计划

    通常我们查看SQL语句的执行计划都是通过EXPLAIN PLAN或者AUTOTRACE来完成.但是这些查看方法有一个限制,它们都是人为触发而产生的,无法获得数据库系统中曾经执行过的SQL语句执行计划. ...

  7. mysql优化SQL语句的一般步骤及常用方法

    一.优化SQL语句的一般步骤 1. 通过show status命令了解各种SQL的执行频率 mysqladmin extended-status 或: show [session|global]sta ...

  8. 在优化SQL语句中使用虚拟索引

    定义:虚拟索引(virtual index) 是指没有创建对应的物理段的索引. 虚拟索引的目的:是在不损耗主机CPU,IO,磁盘空间去实际创建索引的情况下,来判断一个索引是否能够对SQL优化起到作用. ...

  9. 引用:初探Sql Server 执行计划及Sql查询优化

    原文:引用:初探Sql Server 执行计划及Sql查询优化 初探Sql Server 执行计划及Sql查询优化 收藏 MSSQL优化之————探索MSSQL执行计划 作者:no_mIss 最近总想 ...

随机推荐

  1. RT-Thread互斥锁

    互斥锁和信号量很相似, RT-Thread 中的互斥锁也有静态和动态之分,和互斥锁有关的操作如下:初始化—rt_mutex_init()(对应静态互斥锁):建立—rt_mutex_create()(对 ...

  2. sqlserver log

    DBCC LOGINFODBCC log('QSSys', TYPE=2)goselect * from sys.fn_dblog(null,null)select [Dirty Pages],[Mi ...

  3. vue model双向绑定

    view <div id='demo' class="container"> <input type="text" v-model='name ...

  4. Introducing the Accelerated Mobile Pages Project, for a faster, open mobile web

    https://googleblog.blogspot.com/2015/10/introducing-accelerated-mobile-pages.html October 7, 2015 Sm ...

  5. Transform.InverseTransformPoint 反向变换点

    JavaScript ⇒ public function InverseTransformPoint(position: Vector3): Vector3; C# ⇒public Vector3 I ...

  6. Eclipse反编译插件JadEclipse 【转】

    JAVA的反编译插件JadEclipse,官网地址为:http://java.decompiler.free.fr/ 这里面有3个,Jad-Gui大家都知道是一个单独的可执行程序,把要反编绎的jar直 ...

  7. 支持4G以上文件的MD5单元

    根据网上一个流传很久的基于Delph4的MD5单元修改的, 可以支持4G以上的文件, 可以支持UNICODE字符的Delphi 恩.......对于大文件速度稍微慢了一点点, 在我自己的电脑上测试, ...

  8. js弹出确认框,挺全

    一种: <a href="javascript:if(confirm('确实要删除该内容吗?'))location='http://www.google.com'">弹 ...

  9. 关于java字符串编译优化问题

    情景一:不好的字符串拼接习惯    起因是这样的:一个大牛在写了一篇关于java字符串优化问题的讲解,他提到:不要使用strObj+otherValue的方法将otherValue转换为字符串形式,因 ...

  10. CSS控制"标题前增加小图标或编号"

    ---题目前加图片--- p:before { content:url(xxx/xx.png); }//所有p的最前都有一个图标 p.a:after { content:url(xxx/xx.png) ...