优化前:表连接使用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. 18. 求交错序列前N项和

    求交错序列前N项和 #include <stdio.h> int main() { int numerator, denominator, flag, i, n; double item, ...

  2. Web前端开发:什么是页面重回(repaints)与回流(reflow)

    前言:什么是重绘与回流? 重绘(repaints)是一个元素外观的改变所触发的浏览器行为,例如改变vidibility.outline.背景色等属性.浏览器会根据元素的新属性重新绘制,使元素呈现新的外 ...

  3. oracle case when 语句

    原文:http://www.cnblogs.com/eshizhan/archive/2012/04/06/2435493.html CASE WHEN 表达式有两种形式 简单Case函数 CASE ...

  4. jQuery Questions:Front-end Developer Interview Questions

    Explain "chaining". Chaining allows us to run multiple jQuery methods (on the same element ...

  5. LR调用动态链接库DLL

    什么是动态库? 动态库一般又叫动态链接库(DLL),是Dynamic Link Library 的缩写形式,DLL是一个包含可由多个程序同时使用的代码和数据的库. 动态链接提供了一种方法 ,使进程可以 ...

  6. P1379 八数码问题

    aoapc上的八数码问题,在luogu上也有类似的题,p1379,经典题目,lrj给出了一个算法,同时给出了三种判重的方法.本来想用std::queue改写一下,但是出了各种问题,只好抄代码ac掉这道 ...

  7. jquery autocomplete插件结合ajax使用

    <%@ page isELIgnored="false"%> <%@ page contentType="text/html; charset=UTF- ...

  8. ViewModel命令ICommand对象定义

    如果定义如下 public ICommand ViewMenuItemCommand: 那么UI绑定,则无法执行代理方法 需如下定义 public ICommand ViewMenuItemComma ...

  9. php--yii2.0的安装

    1.php.ini中去掉php_openssl.dll前面的“;” 2.注意phpstudy中php版本使用5.4n 3.环境OK后,使用自己的域名访问下yii2.0中advanced中的requir ...

  10. ASP.NET MVC3更新出错:ObjectStateManager中已存在具有同一键的对象

    程序代码: [HttpPost] public ActionResult Edit(Person person) { if (ModelState.IsValid) { Person oldperso ...