Oracle绑定变量Bind Peeking

php中文网
发布: 2016-06-07 17:34:40
原创
1161人浏览过

Oracle 在9i之后引入了Bind Peeking,通过Bind Peeking,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

SuperDesign
SuperDesign

开源的UI设计AI智能体

SuperDesign 216
查看详情 SuperDesign

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行。

linux

相关标签:
最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号