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

news2025/2/18 11:01:09

查询转换的提示

以下每个提示都指示优化程序使用特定的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_sal

FROM employees e1, employees e2, job_history j

WHERE e1.employee_id = e2.manager_id

AND e1.employee_id = j.employee_id

AND e1.hire_date = j.start_date

GROUP BY e1.first_name, e1.last_name, j.job_id

ORDER 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 AS

SELECT e1.first_name, e1.last_name, j.job_id, sum(e2.salary) total_sal

FROM employees e1, (SELECT * FROM employees e3) e2, job_history j

WHERE e1.employee_id = e2.manager_id

AND e1.employee_id = j.employee_id

AND e1.hire_date = j.start_date

AND e1.salary = ( SELECT max(e2.salary)

FROM employees e2

WHERE e2.department_id = e1.department_id )

GROUP BY e1.first_name, e1.last_name, j.job_id

ORDER 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_OUTPUT

FROM 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.coloradmin.cn/o/2297787.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

递归乘法算法

文章目录 递归乘法题目链接题目详解解题思路:代码实现: 结语 欢迎大家阅读我的博客,给生活加点impetus!! 让我们进入《题海探骊》,感受算法之美!! 递归乘法 题目链接 在线OJ 题目…

从当下到未来:蓝耘平台和 DeepSeek 应用实践的路径探索,勾勒 AI 未来新蓝图

我的个人主页 我的专栏:人工智能领域,希望能帮助到大家!!!点赞👍收藏❤ 引言:AI 浪潮中的双引擎 在人工智能蓬勃发展的时代,蓝耘平台与 DeepSeek 宛如推动这一浪潮前进的双引擎。…

Leetcode 算法题 9 回文数

起因, 目的: 数学法。 % 求余数, 拆开组合,组合拆开。 这个题,翻来覆去,拆开组合, 组合拆开。构建的过程。 题目来源,9 回文数: https://leetcode.cn/problems/palindrome-number…

docker compose部署flink集群

本次部署2个jobmanager和3个taskmanager 一、部署zookeeper集群 flink使用zookeeper用作高可用 部署集群参考:docker compose部署zookeeper集群-CSDN博客 二、创建目录及配置文件 创建timezone文件,内容填写Asia/Shanghai 手动创建目录&#xff1a…

常用架构图:业务架构、产品架构、系统架构、数据架构、技术架构、应用架构、功能架构及信息架构

文章目录 引言常见的架构图I 业务架构图-案例模块功能说明1. 用户界面层 (UI)2. 应用服务层3. 数据管理层4. 基础设施层业务流程图示例技术实现II 功能架构图 -案例功能模块说明1. 船舶监控模块2. 报警管理模块3. 应急响应模块4. 通信管理模块5. 数据分析模块数据管理层基础设施…

AI前端开发:解放创造力,而非取代它

近年来,人工智能技术飞速发展,深刻地改变着各行各业,前端开发领域也不例外。越来越多的AI写代码工具涌现,为开发者带来了前所未有的效率提升。很多人担心AI会取代程序员的创造力,但事实并非如此。本文将探讨AI辅助前端…

算法17(力扣217)存在重复元素

1、问题 给你一个整数数组 nums 。如果任一值在数组中出现 至少两次 ,返回 true ;如果数组中每个元素互不相同,返回 false 。 2、示例 (1) 示例 1: 输入:nums [1,2,3,1] 输出:…

NO.16十六届蓝桥杯备战|for循环|七道习题|ceil|floor|pow(C++)

for循环 for循环语法形式 for 循环是三种循环中使⽤最多的, for 循环的语法形式如下: //形式1 for(表达式1; 表达式2; 表达式3) 语句;//形式2 //如果循环体想包含更多的语句,可以加上⼤括号 for(表达式1; 表达式2; 表达式3) { …

深度学习实战基础案例——卷积神经网络(CNN)基于DenseNet的眼疾检测|第4例

文章目录 前言一、数据准备二、项目实战2.1 设置GPU2.2 数据加载2.3 数据预处理2.4 数据划分2.5 搭建网络模型2.6 构建densenet1212.7 训练模型2.8 结果可视化 三、UI设计四、结果展示总结 前言 在当今社会,眼科疾病尤其是白内障对人们的视力健康构成了严重威胁。白…

(一)Axure制作移动端登录页面

你知道如何利用Axure制作移动端登录页面吗?Axure除了可以制作Web端页面,移动端也是可以的哦,下面我们就一起来看一下Axure制作移动端登录页面的过程吧。 第一步:从元件中拖入一个矩形框,并设置其尺寸为:37…

【Linux】【进程】epoll内核实现

【Linux】【进程】epoll内核实现 1 epoll提供的三个函数 1.1 epoll_create(int size); epoll_create()成功返回内核事件表的文件描述符,失败返回-1size 参数现在并不起作用 1.2 epoll_ctl(int epfd, int op, int fd, struct epoll_event *event); epoll_ctl()成…

ICRA-2025 | 具身导航如何跨越地形障碍?SARO:通过视觉语言模型实现地形穿越

作者:Shaoting Zhu, Derun Li, Linzhan Mou, Yong Liu, Ningyi Xu, Hang Zhao 单位:清华大学交叉信息研究院,上海交通大学电子信息与电气工程学院,浙江大学计算机科学与技术学院,宾夕法尼亚大学GRASP实验室&#xff0…

当 LSTM 遇上 ARIMA!!

大家好,我是小青 ARIMA 和 LSTM 是两种常用于时间序列预测的模型,各有优劣。 ARIMA 擅长捕捉线性关系,而 LSTM 擅长处理非线性和长时间依赖的关系。将ARIMA 和 LSTM 融合,可以充分发挥它们各自的优势,构建更强大的时…

终结磁盘空间紧张局面,针对性处理重复、无用文件

软件介绍 在如今这个数字化浪潮汹涌的时代,咱们的电脑存储空间就像一个杂乱无章的储物间,被各种各样的重复文件塞得满满当当。这些重复文件,犹如隐藏在暗处的 “空间小偷”,悄无声息地吞噬着宝贵的硬盘空间,使得原本井…

高校LabVIEW开发调试中的常见问题

在高校进行LabVIEW开发调试时,常常面临硬件选型不当、方案设计不合理、布线不专业以及人员流动性强等问题。这些问题可能影响项目的进展和质量。本文将总结这些问题,并给出具体的解决方案,帮助学生和团队更高效地开展开发工作。 ​ 1. 硬件选…

【故障处理】- RMAN-06593: platform name ‘Linux x86 64-bitElapsed: 00:00:00.00‘

【故障处理】- RMAN-06593: platform name Linux x86 64-bitElapsed: 00:00:00.00 一、概述二、报错原因三、解决方法 一、概述 使用xtts迁移,在目标端进行恢复时,遇到RMAN-06593: platform name Linux x86 64-bitElapsed: 00:00:00.00’报错。 二、报错…

K8S下载离线安装包所需文件

下载相关文件 官网下载地址集合https://kubernetes.io/zh-cn/releases/download/ 下载相关镜像 官网镜像描述 所有 Kubernetes 容器镜像都被部署到 registry.k8s.io 容器镜像仓库。 容器镜像支持架构registry.k8s.io/kube-apiserver:v1.32.0amd64, arm, arm64, ppc64le, …

如何使用Java语言在Idea和Android中分别建立服务端和客户端实现局域网聊天

手把手教你用Java语言在Idea和Android中分别建立服务端和客户端实现局域网聊天 目录 文章目录 手把手教你用**Java**语言在**Idea**和**Android**中分别建立**服务端**和**客户端**实现局域网聊天**目录**[toc]**基本实现****问题分析****服务端**Idea:结构预览Server类代码解…

ArcGIS注册开发账号及API KEY

注册与激活 Sign up | ArcGIS Location Platform 填写信息,然后邮箱收到激活邮件,激活,再补充信息。 参考 Tutorial: Create an API key | Documentation | Esri Developer 产生API KEY Tutorial: Create an API key | Documentation |…

java八股---java面向对象

面向对象 面向对象概述 面向对象和面向过程的区别 面向过程: 优点:性能比面向对象高,因为类调用时需要实例化,开销比较大,比较消耗资源;比如单片机、嵌入式开发、 Linux/Unix等一般采用面向过程开发,性能…