当前位置: 首页 > news >正文

Dav_笔记14:优化程序提示 HINTs -3

查询转换的提示

以下每个提示都指示优化程序使用特定的SQL查询转换:

■NO_QUERY_TRANSFORMATION

■USE_CONCAT

■NO_EXPAND

■REWRITE和NO_REWRITE

■MERGE和NO_MERGE

■STAR_TRANSFORMATION和NO_STAR_TRANSFORMATION

■事实和NO_FACT

■UNNEST和NO_UNNEST

附加提示

以下是几个额外的提示:

■APPEND,APPEND_VALUES和NOAPPEND

■CACHE和NOCACHE

■PUSH_PRED和NO_PUSH_PRED

■PUSH_SUBQ和NO_PUSH_SUBQ

■QB_NAME

■CURSOR_SHARING_EXACT

■DRIVING_SITE

■动态采样

■MODEL_MIN_ANALYSIS

指定提示

提示仅适用于它们出现的语句块的优化。语句块是以下任何一个语句或语句的一部分:

■简单的SELECT,UPDATE或DELETE语句

■复杂语句的父语句或子查询

■复合查询的一部分

例如,由UNION运算符组合的两个组件查询组成的复合查询有两个块,每个块用于一个组件查询。因此,第一个组件查询中的提示仅适用于其优化,而不适用于第二个组件查询的优化。

以下部分更详细地讨论了提示的使用。

指定一整套提示

使用提示时,在某些情况下,您可能需要指定一整套提示以确保最佳执行计划。 例如,如果您有一个非常复杂的查询(包含许多表连接),并且如果仅指定给定表的INDEX提示,则优化程序必须确定要使用的剩余访问路径以及相应的连接方法。 因此,即使您提供了INDEX提示,优化程序也可能不一定使用该提示,因为优化程序可能已确定由于优化程序选择的连接方法和访问路径而无法使用所请求的索引。

在例2中,LEADING提示指定了精确的连接顺序。 还指定了连接方法。

示例2指定一组完整的提示

SELECT /*+ LEADING(e2 e1) USE_NL(e1) INDEX(e1 emp_emp_id_pk)USE_MERGE(j) FULL(j) */e1.first_name, e1.last_name, j.job_id, sum(e2.salary) total_salFROM employees e1, employees e2, job_history jWHERE e1.employee_id = e2.manager_idAND e1.employee_id = j.employee_idAND e1.hire_date = j.start_dateGROUP BY e1.first_name, e1.last_name, j.job_idORDER BY total_sal;

在提示中指定查询块

要在查询中标识查询块,可以在提示中使用可选的查询块名称来指定提示适用的块。查询块参数的语法格式为@queryblock,其中queryblock是指定查询中的块的标识符。查询块标识符可以是系统生成的,也可以是用户指定的。

请注意以下准则:

■您可以使用EXPLAIN PLAN获取系统生成的标识符以进行查询。您可以通过使用NO_QUERY_TRANSFORMATION提示运行EXPLAIN PLAN来查询预转换查询块名称。

■您可以使用QB_NAME提示设置用户指定的名称。

假设

本笔记假定以下内容:

■您打算创建包含嵌套查询块的employees和job_history的联接视图。

■您希望查询视图中的所有行,但仅将NO_UNNEST提示应用于查询块。

要将NO_UNNEST提示应用于查询块:

1.启动SQL * Plus并以用户hr身份登录。

2.创建视图。

例如,运行以下语句:

CREATE OR REPLACE VIEW v_emp_job_history ASSELECT e1.first_name, e1.last_name, j.job_id, sum(e2.salary) total_salFROM employees e1, (SELECT * FROM employees e3) e2, job_history jWHERE e1.employee_id = e2.manager_idAND e1.employee_id = j.employee_idAND e1.hire_date = j.start_dateAND e1.salary = ( SELECT max(e2.salary)FROM employees e2WHERE e2.department_id = e1.department_id )GROUP BY e1.first_name, e1.last_name, j.job_idORDER BY total_sal;

3.解释查询v_emp_job_history的计划。

例如,运行以下SQL语句:

EXPLAIN PLAN FOR SELECT * FROM v_emp_job_history;

4.Query the plan table.

For example, run the following SQL statement:SELECT PLAN_TABLE_OUTPUTFROM TABLE(DBMS_XPLAN.DISPLAY(NULL, NULL, 'ALL'));

The database displays the plan.

5.在查询计划输出中,获取与查询块关联的操作ID,然后使用该ID查找查询块名称。

例如,以下计划显示employees表的完整扫描发生在操作11中,该操作对应于查询块@ SEL $ 4:

6.使用NO_UNNEST提示查询视图。

例如,运行以下SQL语句以应用NO_UNNEST提示来查询块@ SEL $ 4(包括样本输出):

SQL> SELECT /*+ NO_UNNEST( @SEL$4 ) */ * FROM v_emp_job_history;

http://www.lryc.cn/news/536340.html

相关文章:

  • Makefile的用法及算法应用
  • 伯克利 CS61A 课堂笔记 08 —— Strings and Dictionaries
  • 机器学习 - 理解偏差-方差分解
  • Springboot引入(集成)Mybatis-plus
  • stm32 lwip tcp服务端频繁接收连接失效问题解决(tcp_recved)
  • java项目之基于SSM会议管理系统的设计与实现源码(ssm+mysql)
  • 腿足机器人之二- 运动控制概览
  • 【MySQL】基础篇
  • vscode环境搭建
  • tp whereOr用法2
  • 前端面试题目---页面抖动的原因、如何避免、如何解决
  • Spring Boot整合DeepSeek实现AI对话(API调用和本地部署)
  • DeepSeek 的 API 服务引入 WPS Office
  • 在Vue中,JavaScript数组常用方法,添加,插入,查找,删除等整理
  • 树莓派上 基于Opencv 实现人脸检测与人脸识别
  • Unity 接入Tripo 文生模型,图生模型
  • Redis常见数据结构
  • fps动作系统9:动画音频
  • 十四、GitLab 流水线自动化部署之 Windows Server
  • 数据库数据恢复—MongoDB丢失_mdb_catalog.wt文件导致报错的数据恢复案例
  • mysql8.0使用MGR实现高可用与利用MySQL Router构建读写分离MGR集群
  • 基于Ubuntu2404搭建k8s-1.31集群
  • Golang的图形编程应用案例
  • PostgreSQL 错误代码 23505 : ERROR: duplicate key value violates unique constraint
  • 基于SpringBoot和PostGIS的省域“地理难抵点(最纵深处)”检索及可视化实践
  • MySQL InnoDB引擎 MVCC
  • 服务器使用centos7.9操作系统前需要做的准备工作
  • 【Prometheus】prometheus结合cAdvisor监控docker容器运行状态,并且实现实时告警通知
  • 【Stable Diffusion模型测试】测试ControlNet,没有线稿图?
  • 算法刷题-数组系列-卡码网.区间和