Oracle绑定变量Bind Peeking

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/1874631.html

(0)
上一篇 2025年2月22日 09:36:59
下一篇 2025年2月22日 09:37:28

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • Java面试题及答案的高效复习资料

    准备java面试时,高效复习的关键方法包括:1.分类复习,将题目按类型分类;2.动手实践,对于编程题自己动手写代码;3.模拟面试,提升表达和应变能力,这些方法能帮助你巩固知识并在面试中脱颖而出。 引言 在准备Java面试时,找到高效的复习资…

    2025年4月2日
    100
  • java软件开发就业前景怎么样

    Java 软件开发就业前景广阔,原因如下:行业需求旺盛:Java 广泛应用于金融、医疗等行业,企业对 Java 开发人员需求大。高薪水:Java 开发人员薪资通常高于行业平均水平。职业发展机会:Java 开发人员可晋升为高级开发人员、架构师…

    2025年4月2日
    100
  • 从Java框架社区获得帮助的途径

    从 java 框架社区获得帮助有多种途径:在线论坛和社区:stack overflow、java 论坛、github issues社交媒体:twitter、linkedin 群组文档和教程:框架文档、代码示例、书籍社区活动和会议:meetu…

    2025年4月2日
    200
  • java配置环境怎么设置

    要配置 Java 开发环境,需要:安装 JDK 包含 Java 编译器和工具。配置 Java 路径将 JDK bin 目录添加到系统 PATH 中。安装 IDE 提供图形界面,包括代码编辑器和调试器。创建 Java 项目设置项目结构。编译 …

    2025年4月2日
    100
  • java怎么快速入门

    快速入门 Java:安装 JDK安装 IDE(如 IntelliJ IDEA)创建 Java 程序并运行(输出:”Hello, world!”)Java 核心概念:类和对象、数据类型、变量、方法、控制流。深入学习:面…

    2025年4月2日
    100
  • java安装之后怎么用

    Java 安装后使用指南:配置环境变量:设置 JAVA_HOME 和 Path 变量,指向 Java 安装目录和 bin 目录。验证安装:运行 java -version,查看 Java 版本信息。创建 Java 程序:编写 .java 文…

    2025年4月2日
    200
  • java怎么重新安装

    重新安装 Java 需要两步:卸载现有 Java 版本和安装所需版本。1. 卸载现有 Java 版本:打开“控制面板”,导航至“程序和功能”,找到 Java 列表并卸载。2. 安装所需 Java 版本:从 Oracle 网站下载安装程序,按…

    2025年4月2日
    100
  • java安装失败怎么办

    Java 安装失败的解决方法:1. 检查系统要求;2. 下载正确安装程序;3. 禁用杀毒软件;4. 管理员权限;5. 检查路径;6. 检查防火墙;7. 更新操作系统;8. 手动安装 Java;9. 卸载旧版本;10. 联系支持。 Java …

    2025年4月2日
    100
  • java怎么搭建环境

    Java 开发环境搭建步骤:安装 JDK,从官方网站下载最新版本。安装 IntelliJ IDEA、Eclipse 或 NetBeans 等 IDE。设置环境变量,在 Windows 和 macOS/Linux 中分别按照指定步骤进行。在 …

    2025年4月2日
    200
  • java怎么配置jdk

    配置 Java 的 JDK 分为以下 5 个步骤:下载官方 JDK 安装程序。运行安装程序并选择安装目录。设置 JAVA_HOME 环境变量,指向 JDK 安装目录。设置 PATH 环境变量,包括 JDK 的 bin 目录。验证安装,检查 …

    2025年4月2日
    100

发表回复

登录后才能评论