当前位置:  数据库>oracle

Oracle绑定变量Bind Peeking

    来源: 互联网  发布时间:2017-05-31

    本文导语: Oracle 在9i之后引入了Bind Peeking,通过Bind Peeking,Oracle可以在硬解析的时候窥探绑定变量的值,并根据当前绑定变量的值生成执行计划。在Oracle 9i之前的版本中,Oracle仅仅通过统计信息来生成执行计划。 下面看一下不同版本Oracle...

Oracle 在9i之后引入了Bind Peeking,通过Bind Peeking,Oracle可以在硬解析的时候窥探绑定变量的值,并根据当前绑定变量的值生成执行计划。在Oracle 9i之前的版本中,Oracle仅仅通过统计信息来生成执行计划。

下面看一下不同版本Oracle下绑定变量对执行计划的影响

SQL> alter system flush shared_pool;

系统已更改。

SQL> alter system set optimizer_features_enable='8.1.7';

系统已更改。

SQL> var v number;
SQL> exec :v := 1;

PL/SQL 过程已成功完成。

SQL> select count(*) from acs_test_tab where record_type = :v;

  COUNT(*)
----------
  1

SQL> select * from table(dbms_xplan.display_cursor(null,null,'advanced'));

PLAN_TABLE_OUTPUT
----------------------------------------------------------------------------------------------------
SQL_ID 3rg5r8sghcvb3, child number 0
-------------------------------------
select count(*) from acs_test_tab where record_type = :v

Plan hash value: 2956728990

--------------------------------------------------------------------------------
| Id  | Operation  | Name        | Rows  | Bytes | Cost  |
--------------------------------------------------------------------------------
|  0 | SELECT STATEMENT  |          |      |      |    3 |
|  1 |  SORT AGGREGATE  |          |    1 |    4 |      |
|*  2 |  INDEX RANGE SCAN| ACS_TEST_TAB_RECORD_TYPE_I |    2 |    8 |    3 |
--------------------------------------------------------------------------------


Predicate Information (identified by operation id):
---------------------------------------------------

  2 - access("RECORD_TYPE"=:V)


已选择47行。

SQL> alter system flush shared_pool;

系统已更改。

SQL> alter system set optimizer_features_enable='11.2.0.3.1';

系统已更改。

SQL> var v number;
SQL> exec :v := 1;

PL/SQL 过程已成功完成。

SQL> select count(*) from acs_test_tab where record_type = :v;

  COUNT(*)
----------
  1

SQL> select * from table(dbms_xplan.display_cursor(null,null,'advanced'));

PLAN_TABLE_OUTPUT
----------------------------------------------------------------------------------------------------
SQL_ID 3rg5r8sghcvb3, child number 0
-------------------------------------
select count(*) from acs_test_tab where record_type = :v

Plan hash value: 2956728990

------------------------------------------------------------------------------------------------
| Id  | Operation  | Name        | Rows  | Bytes | Cost (%CPU)| Time    |
------------------------------------------------------------------------------------------------
|  0 | SELECT STATEMENT  |          |      |      |    3 (100)|        |
|  1 |  SORT AGGREGATE  |          |    1 |    4 |    |        |
|*  2 |  INDEX RANGE SCAN| ACS_TEST_TAB_RECORD_TYPE_I |    1 |    4 |    3  (0)| 00:00:01 |
------------------------------------------------------------------------------------------------


Peeked Binds (identified by position):
--------------------------------------

  1 - :V (NUMBER): 1  --绑定变量窥探

Predicate Information (identified by operation id):
---------------------------------------------------

  2 - access("RECORD_TYPE"=:V)


已选择49行。

SQL> alter system flush shared_pool;

系统已更改。

SQL> exec :v := 2;

PL/SQL 过程已成功完成。

SQL> select count(*) from acs_test_tab where record_type = :v;

  COUNT(*)
----------
    50000

SQL> select * from table(dbms_xplan.display_cursor(null,null,'advanced'));

PLAN_TABLE_OUTPUT
----------------------------------------------------------------------------------------------------
SQL_ID 3rg5r8sghcvb3, child number 0
-------------------------------------
select count(*) from acs_test_tab where record_type = :v

Plan hash value: 2957754476

----------------------------------------------------------------------------------------------------
| Id  | Operation      | Name      | Rows  | Bytes | Cost (%CPU)| Time    |
----------------------------------------------------------------------------------------------------
|  0 | SELECT STATEMENT      |       |    |    |  136 (100)|    |
|  1 |  SORT AGGREGATE      |       |  1 |  4 |  |    |
|*  2 |  INDEX FAST FULL SCAN| ACS_TEST_TAB_RECORD_TYPE_I | 48031 |  187K|  136  (1)| 00:00:02 |
----------------------------------------------------------------------------------------------------

Peeked Binds (identified by position):
--------------------------------------

  1 - :V (NUMBER): 2  --绑定变量窥探,绑定变量会影响最初硬解析的执行计划

Predicate Information (identified by operation id):
---------------------------------------------------

  2 - filter("RECORD_TYPE"=:V)


已选择49行。


    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • Oracle 12c发布简单介绍及官方下载地址
  • 在linux下安装oracle,如何设置让oracle自动启动!也就是让oracle那个服务自动启动,不是手动的
  • oracle 11g最新版官方下载地址
  • 请问su oracle 和su - oracle有什么不同?
  • Oracle 数据库(oracle Database)Select 多表关联查询方式
  • 虚拟机装Oracle R12与Oracle10g
  • Oracle数据库(Oracle Database)体系结构及基本组成介绍
  • Oracle 数据库开发工具 Oracle SQL Developer
  • 如何设置让Oracle SQL Developer显示的时间包含时分秒
  • Oracle EBS R12 支持 Oracle Database 11g
  • Oracle 10g和Oracle 11g网格技术介绍
  • SCO unix下安装oracle,但没有光盘,请大家推荐一个oracle下载站点(unix版本的)。谢谢!!!!
  • oracle中如何把表中具有相同值列的多行数据合并成一行
  • 请问大家用oracle数据库, 用import oracle.*;下的东西么? 还是用标准库?
  • Oracle 数据库(oracle Database)性能调优技术详解
  • Linux /$ORACLE_HOME $ORACLE_HOME
  • ORACLE日期相关操作
  • Linux系统下Oracle的启动与Oracle监听的启动
  • ORACLE数据库常用字段数据类型介绍
  • 请问在solaris下安装ORACLE,用root用户和用oracle用户安装有什么区别么?
  • Oracle 12c的九大最新技术特性介绍
  • 网间Oracle的连接,远程连接Oracle服务器??


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,