Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >Oracle 绑定变量窥探

Oracle 绑定变量窥探

作者头像
Leshami
发布于 2018-08-14 03:10:03
发布于 2018-08-14 03:10:03
1.7K00
代码可运行
举报
文章被收录于专栏:乐沙弥的世界乐沙弥的世界
运行总次数:0
代码可运行

    Bind Peeking是Oracle 9i中引入的新特性,一直持续到Oracle 10g R2。它的作用就是在SQL语句硬分析的时候,查看一下当前SQL谓词的值 ,以便生成最佳的执行计划。而在oracle 9i之前的版本中,Oracle 只根据统计信息来做出执行计划。

一、绑定变量窥探     使用SQL首次运行时的值来生成执行计划。后续再次运行该SQL语句则使用首次执行计划来执行。     影响的版本:Oracle 9i, Oracle 10g     对于绑定变量列中的特殊值或非均匀分布列上的绑定变量会造成非高效的执行计划被选择并执行。         要注意的是,Bind Peeking只发生在硬分析的时候,即SQL被第一次执行的时候,之后的变量将不会在做peeking。我们可以看出,Bind     peeking并不能最终解决不同谓词导致选择不同执行计划的问题,它只能让SQL第一次执行的时候,执行计划选择更加准确,并不能帮助OLAP     系统解决绑定变量导致执行计划选择错误的问题。这也是OLAP不应该使用绑定变量的一个原因。

        更确切地说,绑定变量窥探是在SQL解析的物理阶段,查询优化器将会窥探绑定变量的值并将其作为字面量来使用。即ORACLE首次解析     SQL时会将变量的真实值代入产生执行计划,后续对所有使用该绑定变量SQL语句都采用首次生存的执行计划。如此这般?那性能究竟如何?     结果是并非最佳的执行计划的使用。此问题在Oracle 11g中得以解决。           请参考:Oracle自适应共享游标

二、示例绑定变量窥探     1、创建演示环境       

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SQL> select * from v$version where rownum<2;    -->查看当前数据库版本                                         
                                                                                                              
BANNER                                                                                                        
----------------------------------------------------------------                                              
Oracle Database 10g Release 10.2.0.3.0 - 64bit Production                                                     
                                                                                                              
SQL> create table t(id,owner,object_id) as       -->创建测试表t                                               
  2  select rownum,owner,object_id from all_objects where rownum<=1000;                                       
                                                                                                              
SQL> alter table t add constraint t_pk primary key(id);  -->为表t添加主键                                     
                                                                                                              
SQL> begin                                               -->收集统计信息,此处未生成直方图信息                 
  2  dbms_stats.gather_table_stats(                                                                           
  3  ownname=>'SCOTT',                                                                                        
  4  tabname=>'T',                                                                                            
  5  estimate_percent=>100,                                                                                   
  6  method_opt=>'for all columns size 1');                                                                   
  7  end;                                                                                                     
  8  /                                                                                                        
                                                                                                              
PL/SQL procedure successfully completed.                                                                      
                                                                                                              
SQL> select count(id),count(distinct id),min(id),max(id) from t;  -->查看值的分布情况                         
                                                                                                              
 COUNT(ID) COUNT(DISTINCTID)    MIN(ID)    MAX(ID)                                                            
---------- ----------------- ---------- ----------                                                            
      1000              1000          1       1000                                                            

    2、未使用绑定变量情形下SQL语句的执行计划       

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SQL> select sum(object_id) from t where id<900;     -->发布SQL 查询语句                                              
                                                                                                                     
SUM(OBJECT_ID)                                                                                                       
--------------                                                                                                       
        446549                                                                                                       
                                                                                                                     
SQL> select * from table(dbms_xplan.display_cursor()); -->由其执行计划可知,当前的SQL语句使用了全表扫描              
/**************************************************/                                                                 
/* Author: Robinson Cheng                         */                                                                 
/* Blog:   http://blog.csdn.net/robinson_0612     */                                                                 
/* MSN:    robinson_0612@hotmail.com              */                                                                 
/* QQ:     645746311                              */                                                                 
/**************************************************/                                                                 
				                                                                                                             
PLAN_TABLE_OUTPUT                                                                                                    
---------------------------------------------------------------------------                                          
SQL_ID  bz6h6fdsxgjka, child number 0                                                                                
-------------------------------------                                                                                
select sum(object_id) from t where id<900                                                                            
                                                                                                                     
Plan hash value: 2966233522                                                                                          
                                                                                                                     
---------------------------------------------------------------------------                                          
| Id  | Operation          | Name | Rows  | Bytes | Cost (%CPU)| Time     |                                          
---------------------------------------------------------------------------                                          
|   0 | SELECT STATEMENT   |      |       |       |     3 (100)|          |                                          
|   1 |  SORT AGGREGATE    |      |     1 |     8 |            |          |                                          
|*  2 |   TABLE ACCESS FULL| T    |   900 |  7200 |     3   (0)| 00:00:01 |                                          
---------------------------------------------------------------------------                                          
                                                                                                                     
Predicate Information (identified by operation id):                                                                  
---------------------------------------------------                                                                  
                                                                                                                     
   2 - filter("ID"<900)                                                                                              
                                                                                                                     
SQL> select sum(object_id) from t where id<10;   -->发布另一条SQL 查询语句                                           
                                                                                                                     
SQL> select * from table(dbms_xplan.display_cursor()); -->此时的查询生成的执行计划走索引范围扫描                     
                                                       -->由于字面量不同,因此两条SQL语句生成了不同的SQL_ID与执行计划
PLAN_TABLE_OUTPUT                                                                                                    
--------------------------------------------------------------------------                                           
SQL_ID  6y2280pyvacfq, child number 0                                                                                
-------------------------------------                                                                                
select sum(object_id) from t where id<10                                                                             
                                                                                                                     
Plan hash value: 4270555908                                                                                          
                                                                                                                     
-------------------------------------------------------------------------------------                                
| Id  | Operation                    | Name | Rows  | Bytes | Cost (%CPU)| Time     |                                
-------------------------------------------------------------------------------------                                
|   0 | SELECT STATEMENT             |      |       |       |     3 (100)|          |                                
|   1 |  SORT AGGREGATE              |      |     1 |     8 |            |          |                                
|   2 |   TABLE ACCESS BY INDEX ROWID| T    |     9 |    72 |     3   (0)| 00:00:01 |                                
|*  3 |    INDEX RANGE SCAN          | T_PK |     9 |       |     2   (0)| 00:00:01 |                                
-------------------------------------------------------------------------------------                                
                                                                                                                     
Predicate Information (identified by operation id):                                                                  
---------------------------------------------------                                                                  
                                                                                                                     
   3 - access("ID"<10)                                                                                               

    3、使用绑定变量情形下的执行计划             

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SQL> variable v_id number;   -->定义绑定变量                                                                         
SQL> exec :v_id:=900;        -->给绑定变量赋值                                                                       
                                                                                                                     
PL/SQL procedure successfully completed.                                                                             
                                                                                                                     
SQL> select sum(object_id) from t where id<:v_id;                                                                    
                                                                                                                     
SUM(OBJECT_ID)                                                                                                       
--------------                                                                                                       
        446549                                                                                                       
                                                                                                                     
SQL> select * from table(dbms_xplan.display_cursor());   -->此时上一条SQL语句走了全表扫描,其SQL_ID 为7qcp6urqh7d2j  
                                                                                                                     
PLAN_TABLE_OUTPUT                                                                                                    
------------------------------------------------------------------------------                                       
SQL_ID  7qcp6urqh7d2j, child number 0                                                                                
-------------------------------------                                                                                
select sum(object_id) from t where id<:v_id                                                                          
                                                                                                                     
Plan hash value: 2966233522                                                                                          
                                                                                                                     
---------------------------------------------------------------------------                                          
| Id  | Operation          | Name | Rows  | Bytes | Cost (%CPU)| Time     |                                          
---------------------------------------------------------------------------                                          
|   0 | SELECT STATEMENT   |      |       |       |     3 (100)|          |                                          
|   1 |  SORT AGGREGATE    |      |     1 |     8 |            |          |                                          
|*  2 |   TABLE ACCESS FULL| T    |   900 |  7200 |     3   (0)| 00:00:01 |                                          
---------------------------------------------------------------------------                                          
                                                                                                                     
Predicate Information (identified by operation id):                                                                  
---------------------------------------------------                                                                  
                                                                                                                     
   2 - filter("ID"<:V_ID)    -->谓词信息表明此时使用了绑定变量                                                       
                                                                                                                     
SQL> exec :v_id:=10;         -->对绑定变量重新赋值                                                                   
                                                                                                                     
PL/SQL procedure successfully completed.                                                                             
                                                                                                                     
SQL> select sum(object_id) from t where id<:v_id;   -->再次执行SQL语句                                               
                                                                                                                     
SUM(OBJECT_ID)                                                                                                       
--------------                                                                                                       
           254                                                                                                       
                                                                                                                     
SQL> select * from table(dbms_xplan.display_cursor());  -->此时执行计划中依然选择的是全表扫描                        
                                                        -->SQL_ID同上一次执行的SQL语句相同,即实现了完全共享       
PLAN_TABLE_OUTPUT                                       -->对于未使用绑定变量时id<10的情形则为走索引范围扫描         
-----------------------------------------------         -->由此可知,并非最佳的执行计划被执行                        
SQL_ID  7qcp6urqh7d2j, child number 0                                                                                
-------------------------------------                                                                                
select sum(object_id) from t where id<:v_id                                                                          
                                                                                                                     
Plan hash value: 2966233522                                                                                          
                                                                                                                     
---------------------------------------------------------------------------                                          
| Id  | Operation          | Name | Rows  | Bytes | Cost (%CPU)| Time     |                                          
---------------------------------------------------------------------------                                          
|   0 | SELECT STATEMENT   |      |       |       |     3 (100)|          |                                          
|   1 |  SORT AGGREGATE    |      |     1 |     8 |            |          |                                          
|*  2 |   TABLE ACCESS FULL| T    |   900 |  7200 |     3   (0)| 00:00:01 |                                          
---------------------------------------------------------------------------                                          
                                                                                                                     
Predicate Information (identified by operation id):                                                                  
---------------------------------------------------                                                                  
                                                                                                                     
   2 - filter("ID"<:V_ID)                                                                                            
                                                                                                                     
SQL> alter system flush shared_pool;    -->清空共享池,此时共享的父游标与子游标全部释放                              
		                                                                                                                 
SQL> print v_id;                                                                                                     
                                                                                                                     
      V_ID                                                                                                           
----------                                                                                                           
        10                                                                                                           
                                                                                                                     
SQL> select round(avg(object_id)) from t where id<:v_id;   -->使用id<10来执行SQL语句                                 
                                                                                                                     
ROUND(AVG(OBJECT_ID))                                                                                                
---------------------                                                                                                
                   28                                                                                                
                                                                                                                     
SQL> select * from table(dbms_xplan.display_cursor());    -->此时该SQL语句使用了最佳的执行计划,即走索引范围扫描     
                                                                                                                     
PLAN_TABLE_OUTPUT                                                                                                    
---------------------------------------------------------------------------------------                              
SQL_ID  0bx53mgt4qqnt, child number 0                                                                                
-------------------------------------                                                                                
select round(avg(object_id)) from t where id<:v_id                                                                   
                                                                                                                     
Plan hash value: 4270555908                                                                                          
                                                                                                                     
-------------------------------------------------------------------------------------                                
| Id  | Operation                    | Name | Rows  | Bytes | Cost (%CPU)| Time     |                                
-------------------------------------------------------------------------------------                                
|   0 | SELECT STATEMENT             |      |       |       |     3 (100)|          |                                
|   1 |  SORT AGGREGATE              |      |     1 |     8 |            |          |                                
|   2 |   TABLE ACCESS BY INDEX ROWID| T    |     9 |    72 |     3   (0)| 00:00:01 |                                
|*  3 |    INDEX RANGE SCAN          | T_PK |     9 |       |     2   (0)| 00:00:01 |                                
-------------------------------------------------------------------------------------                                
                                                                                                                     
Predicate Information (identified by operation id):                                                                  
---------------------------------------------------                                                                  
                                                                                                                     
   3 - access("ID"<:V_ID)                                                                                            
                                                                                                                     
SQL> exec :v_id:=900;                   -->为变量赋新值                                                              
                                                                                                                     
PL/SQL procedure successfully completed.                                                                             
                                                                                                                     
SQL> select round(avg(object_id)) from t where id<:v_id;                                                             
                                                                                                                     
ROUND(AVG(OBJECT_ID))                                                                                                
---------------------                                                                                                
                  497                                                                                                
                                                                                                                     
SQL> select * from table(dbms_xplan.display_cursor()); -->此次运行的SQL语句本该使用全表扫描,而此时选择了索引范围扫描
                                                                                                                     
PLAN_TABLE_OUTPUT                                                                                                    
--------------------------------------------------------------------------------------                               
SQL_ID  0bx53mgt4qqnt, child number 0                                                                                
-------------------------------------                                                                                
select round(avg(object_id)) from t where id<:v_id                                                                   
                                                                                                                     
Plan hash value: 4270555908                                                                                          
                                                                                                                     
-------------------------------------------------------------------------------------                                
| Id  | Operation                    | Name | Rows  | Bytes | Cost (%CPU)| Time     |                                
-------------------------------------------------------------------------------------                                
|   0 | SELECT STATEMENT             |      |       |       |     3 (100)|          |                                
|   1 |  SORT AGGREGATE              |      |     1 |     8 |            |          |                                
|   2 |   TABLE ACCESS BY INDEX ROWID| T    |     9 |    72 |     3   (0)| 00:00:01 |                                
|*  3 |    INDEX RANGE SCAN          | T_PK |     9 |       |     2   (0)| 00:00:01 |                                
-------------------------------------------------------------------------------------                                
                                                                                                                     
Predicate Information (identified by operation id):                                                                  
---------------------------------------------------                                                                  
                                                                                                                     
   3 - access("ID"<:V_ID)                                                                                            
                                                                                                                     
SQL> drop table t;                                                                                                   

三、总结     从上面的演示可以,由于绑定变量窥探特性,对于后续生成的执行计划,不仅套用了首次生成的执行计划,而且执行计划中的Row,Bytes, Cost(%CPU)等都与首次生存执行计划得值相同。由此可知,尽管可以使用绑定变量解决OLTP系统中大量重复SQL的反复解析的问题。但绑定变量 可能会导致SQL语句选择非最佳的执行计划。尤其是对于存在数据倾斜的列,且生成了直方图更不宜于使用绑定变量。在Oracle 11g 中,自适 应特性从一定程度解决了绑定变量窥探所导致的问题。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2011年11月01日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Oracle自适应共享游标
    自适应游标共享Adaptive Cursor Sharing或扩展的游标共享(Extended Cursor Sharing)是Oracle 11g的新特性之一,主要用于解决以前版 本中由于绑定变量窥探导致SQL语句无法获得最佳执行计划的缺陷,即能够对效率低下的游标(子游标)进行自动识别而选择最佳的执行计划。本 文详细描述了自适应游标共享并给出示例。     有关绑定变量窥探请参考:Oracle 绑定变量窥探
Leshami
2018/08/14
9990
【DB笔试面试598】在Oracle中,如何得到真实的执行计划?
在Oracle数据库中判断得到的执行计划是否准确,就是看目标SQL是否被真正执行过,真正执行过的SQL所对应的执行计划就是准确的,反之则有可能不准,因此,通过10046事件及如下的几种方式得到的执行计划是最准确的,而从其它方式获取到的执行计划都有可能不准确。
AiDBA宝典
2019/09/29
7060
读书笔记-《基于Oracle的SQL优化》-第二章-1
1、目标SQL的正文、SQL ID和其执行计划所对应的的PLAN HASH VALUE。
bisal
2019/01/29
9360
Oracle优化之单表分页优化
SQL> create table t_test as select * from dba_objects;
星哥玩云
2022/08/17
9250
【DB笔试面试586】在Oracle中,什么是自适应游标共享(2)?
另外,在目标列有Frequency类型直方图的前提条件下,如果对目标列施加等值查询条件,且该查询条件的输入值等于该列的某个实际值时,则该谓词条件的可选择率的计算公式为如下所示:
AiDBA宝典
2019/09/29
5400
【DB笔试面试586】在Oracle中,什么是自适应游标共享(1)?
绑定变量窥探的副作用就在于,使用了绑定变量的目标SQL只会沿用之前硬解析时所产生的解析树和执行计划,即使这种沿用完全不适合于当前的情形。在Oracle 10g及其后续的版本中,Oracle会自动收集直方图统计信息,这意味着与之前的版本相比,在Oracle 10g及其后续的版本中Oracle有更大的概率会知道目标列实际数据的分布情况,也就是说绑定变量窥探的副作用将会更加明显。当Oracle执行绑定变量窥探操作时绑定变量所对应的输入值是否具有代表性就至关重要了(这里“代表性”是指该输入值所对应的执行计划和该SQL在大多数情况下的执行计划相同),因为这会直接决定此目标SQL在硬解析时所选择的执行计划,进而决定后续以软解析/软软解析重复执行时所沿用的执行计划。
AiDBA宝典
2019/09/29
7030
cannot fetch plan for SQL_ID
  SQL tuning过程中离不开分析SQL语句的执行计划。在一次提取执行计划的时候碰到cannot fetch plan for SQL_ID的错误提示。根据错误 提示来看需要检查SQL的子游标或该执行计划不在v$sql_plan表中,而这种情况一般不存在。因为刚刚执行过的SQL语句不可能这么快从v$sql_plan 移除。下面给出错误描述及处理办法。
Leshami
2018/08/14
6120
Oracle获取执行计划的方法(六脉神剑)
优点:可以通过STRATS得出表被访问次数;可以通过E-Rows和A-Rows来判断预测行数和实际行数是否一致;可以通过Buffers来获取逻辑读数值。
Lucifer三思而后行
2021/08/17
6280
Oracle获取执行计划的方法(六脉神剑)
Oracle优化05-执行计划
如果要分析某条SQL的性能问题,通常来讲,我们首先要看SQL的执行计划,看看SQL的每一步执行计划是否存在问题。
小小工匠
2021/08/16
7910
【DB笔试面试642】在Oracle中,什么是基数反馈(Cardinality Feedback)?
基数反馈(Cardinality Feedback,CFB)是Oracle 11gR2出现的一个新特性,它的出现是为了帮助Oracle优化器依据更精准的基数生成更加优秀的执行计划。基数的评估准确与否,对于优化器异常重要,直接影响到后续的JOIN COST等重要的成本计算评估。若评估不当则会造成CBO选择不当的执行计划。此技术对于仅执行一次的SQL无效,在SQL第一次执行时,记录存储实际的基数和评估的基数之间的差异,如果差异较大,在第二次执行时,优化器会依据实际的基数重新决策生成执行计划,但是需要注意的是,当使用更准确的基数重新生成执行计划时,生成的执行计划与第一次时使用的执行计划完全有可能是相同的。这个技术的出现是由于优化器在一些情况下不能很好的去计算基数的数值,比如:统计信息缺失或陈旧、多谓词、直方图缺失等等。
AiDBA宝典
2019/09/29
7810
为什么预估执行计划与真实执行计划会有差异?
一 问题概要 对同一个 SQL 语句的 ExplainPlan 里显示的预估执行计划与通过 V$SQL_PLAN 视图获取的 Runtime Plan 真实执行计划,偶尔会发现两边有不一致的情况,为什么呢?为什么预估执行计划会不准确?怎样才能避免这种情况的发生? 二 问题解答 这是执行计划相关中会被经常问道的问题,也是困扰自己很长时间的问题。希望通过下面的分析能解释一部分原因。 对同一个 SQL 语句的 ExplainPlan 里显示的预估执行计划与通过 V$SQL_PLAN 视图获取的真实执行计划不
数据和云
2018/04/17
8460
为什么预估执行计划与真实执行计划会有差异?
[Oracle]-[sqlplus相关]-serveroutput参数
select /*+ no_index(t1 idx_t1) */ * from t1 where n=3; select * from table(dbms_xplan.display_cursor(null,null,'advanced'));
bisal
2019/01/29
1.1K0
dbms_xplan之display函数的使用
DBMS_XPLAN包包括一系列函数,主要是用于显示SQL语句的执行计划,且不同的情形下使用不同的函数来显示,如预估的执行计划则使用 display函数,而实际的执行计划则是用display_cursor函数,对于awr中的执行计划,则是用display_awr函数,而SQL tuning集合中的执行计划 则由display_sqlset来完成。本文主要描述DBMS_XPLAN包中display函数的使用,尽管可以通过SQL语句来查询缺省表plan_table来获得执行计划, 事实上,使用display函数更便捷,且display函数提供了多种不同的显示格式。         有关执行计划中各字段模块的描述请参考: 执行计划中各字段各模块描述         有关由SQL语句来获取执行计划请参考:     使用 EXPLAIN PLAN 获取SQL语句执行计划         有关使用autotrace来获取执行计划请参考:启用 AUTOTRACE 功能         有关display_cursor函数的使用请参考:     dbms_xplan之display_cursor函数的使用 一、DBMS_XPLAN包中的函数
Leshami
2018/08/14
1.3K0
【DB笔试面试582】在Oracle中,什么是绑定变量窥探(下)?
若启用了绑定变量窥探且WHERE条件为“目标列 BETWEEN X AND Y”的selectivity计算公式为:
AiDBA宝典
2019/09/29
1.2K0
一次有意思的错选执行计划问题定位(涉及SYS_OP_C2)
1. 11g的库,话说有一个应用程序新上线,应用中使用了绑定变量的方式执行一条简单的SQL,例如select a from b where c = :x,c列是该表复合主键的前导列,表定义是varchar2类型,从spotlight监控看这条SQL的执行计划是全表扫描,一次执行要1个小时,这张表是运行很久的引用分区表,数据量是亿级,测试的时候正常,但很显然测试的数据量可能和生产非常不一致,导致没察觉。
bisal
2019/01/29
6340
【DB笔试面试582】在Oracle中,什么是绑定变量窥探(上)?
目标SQL若不使用绑定变量,则当具体输入值一旦发生了变化,目标SQL的SQL文本就会随之发生变化,这样Oracle就能很容易地计算出对应Selectivity和Cardinality的值,进而据此来选择执行计划。但对于使用了绑定变量的目标SQL而言,情况就完全不一样了,因为现在无论对应绑定变量的具体输入值是什么,目标SQL的SQL文本都是一模一样的。对于使用了绑定变量的目标SQL而言,Oracle可以选择如下两种方法来决定其执行计划:
AiDBA宝典
2019/09/29
1.5K0
Oracle面对“数据倾斜列使用绑定变量”场景的解决方案
    我们知道,Oracle在传统的OLTP(在线事务处理)类系统中,强烈推荐使用绑定变量,这样可以有效的减少硬解析从而增加系统的并发处理能力。甚至在有些老旧系统,由于在开始开发阶段缺乏认识没有使用到绑定变量,后期并发量增长且无法改造程序时,运维DBA还会不得已去设置cursor_sharing=force来强制使用系统的绑定变量(这是一个万不得已的方案,并不是最佳实践)。
Alfred Zhao
2019/08/27
1.8K0
【DB笔试面试586】在Oracle中,什么是自适应游标共享(3)?
从如下查询结果可以看到目标SQL对应的列VERSION_COUNT的值从之前的5变为了现在的6,列EXECUTIONS的值为7,说明Oracle在第7次执行目标SQL时依然用的是硬解析。从查询结果可以看到,Oracle此时新生成了一个CHILD_NUMBER为5的Child Cursor,并且把存储相同执行计划的CHILD_NUMBER为4的原有Child Cursor标记为非共享。
AiDBA宝典
2019/09/29
3590
视图 v$sql,v$sqlarea,$sqltext,v$sqltext_with_newlines 的差异
      视图v$sql,v$sqlarea,v$sqltext,v$sqltext_with_newlines 是几个经常容易混淆的视图,主要是提供library cache中当前缓存的sql语句的信息。这几个视图都可以提供当前有关sql语句的具体信息,但稍有差异。本文主要描述其差异并给出实例。
Leshami
2018/08/14
1.1K0
Oracle之SQL优化专题01-查看SQL执行计划的方法3.1 dbms_xplan.display_cursor(null,null,'allstats last')3.2 dbms_xplan.
在我2014年总结的“SQL Tuning 基础概述”中,其实已经介绍了一些查看SQL执行计划的方法,但是不够系统和全面,所以本次SQL优化专题,就首先要系统的介绍一下查看SQL执行计划的方法。 本文示例SQL为: --set lines 1000 pages 1000 select a.empno, a.ename, b.dname, a.job, a.sal from emp a, dept b where a.deptno = b.deptno and empno = 7788; 1.explain
Alfred Zhao
2018/05/11
1.7K0
推荐阅读
相关推荐
Oracle自适应共享游标
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验