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;

相关文章:
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…...
Makefile的用法及算法应用
编译的过程 算法:解决特定问题的求解步骤 算法的设计 1.正确性 语法正确合法的输入能得到合理的结果对非法的输入,给出满足要求的规格说明对精心选择,甚至刁难的测试都能正常运行,结果正确 2.可读性,便于交流&…...
伯克利 CS61A 课堂笔记 08 —— Strings and Dictionaries
本系列为加州伯克利大学著名 Python 基础课程 CS61A 的课堂笔记整理,全英文内容,文末附词汇解释。 目录 01 Strings 字符串 Ⅰ Strings are An Abstraction. Ⅱ Strings Literals have Three Forms Ⅲ String are Sequences 02 Dictionaries 字典 …...
机器学习 - 理解偏差-方差分解
为了避免过拟合,我们经常会在模型的拟合能力和复杂度之间进行权衡。拟合能力强的模型一般复杂度会比较高,容易导致过拟合。相反,如果限制模型的复杂度,降低其拟合能力,又可能会导致欠拟合。因此,如何在模型…...
Springboot引入(集成)Mybatis-plus
1、添加依赖 <!--mysql数据库--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.49</version></dependency><!--mybatis-plus--><dependency><groupI…...
stm32 lwip tcp服务端频繁接收连接失效问题解决(tcp_recved)
一、问题描述 最近用stmf429单片机作为TCP服务端遇到一个问题,就是客户端特别频繁的发送消息,过一段时间以后,客户端的请求不再被客户端接收到,而且服务器端监控的掉线回调函数也不会被调用,好像这个连接就凭空的消失…...
java项目之基于SSM会议管理系统的设计与实现源码(ssm+mysql)
项目简介 基于SSM会议管理系统的设计与实现实现了以下功能: 基于SSM会议管理系统的设计与实现的主要使用者分为:管理员登录后修改个人的密码。用户管理中,对公司内的用户进行管理,包括会议管理员和员工,管理部门信息…...
腿足机器人之二- 运动控制概览
腿足机器人之二运动控制概览 高层运动规划MPCRL 中层逆运动学和逆动力学底层执行器控制传感器校正 上一篇博客是腿足机器人的骨架和关节的机械和电气组件,关节不仅需要通过机械设计实现复杂的运动能力,还必须通过电子组件和控制系统来精确控制这些运动。…...
【MySQL】基础篇
1. MySQL中的NULL值是怎么存放的? MySQL的compact行格式中会用【NULL值列表】来标记值为NULL的列,NULL值不会存储在行格式中的真实数据部分。 NULL值列表会占用1字节空间,当表中所有字段都被定义成NOT NULL,行格式中就不会有NULL值…...
vscode环境搭建
目录 一、安装VSCode 二、安装Python 三、安装Anaconda(可选,但推荐) 四、安装深度学习相关库 五、配置VSCode 六、 结果可视化 一、安装VSCode 访问官网下载:从VSCode官方网站下载适合你操作系统的安装包。安装:运行安…...
tp whereOr用法2
有时候会用到多个whereOr 可以用闭包来完成查询 Db::name(table_name)->whereOr([[age,null,],[age,,]])->select();Db::name(table_name)->whereOr([[birthday,null,],[birthday,,]])->select();这两个是OR(或)关系 Db::name(table_name)->whereOr([[age,nul…...
前端面试题目---页面抖动的原因、如何避免、如何解决
前端页面抖动是一个常见且影响用户体验的问题,下面将从抖动发生的场景、解决办法以及预防措施三个方面进行详细阐述。 页面抖动发生的场景 1. 元素尺寸动态变化 图片加载:当页面中图片的宽高没有预先设定,在图片加载完成后,其实…...
Spring Boot整合DeepSeek实现AI对话(API调用和本地部署)
本篇文章会分基于DeepSeek开放平台上的API,以及本地私有化部署DeepSeek R1模型两种方式来整合使用。 本地化私有部署可以参考这篇博文 全面认识了解DeepSeek利用ollama在本地部署、使用和体验deepseek-r1大模型 Spring版本选择 根据Spring官网的描述 Spring AI是一…...
DeepSeek 的 API 服务引入 WPS Office
以下是将 DeepSeek 的 API 服务引入 WPS Office 的通用集成教程。以调用 DeepSeek 的 AI 功能(如文本生成、数据分析)为例,假设你需要通过 WPS 的宏或插件调用外部 API: 准备工作 注册 DeepSeek 账号并获取 API Key 访问 DeepSe…...
在Vue中,JavaScript数组常用方法,添加,插入,查找,删除等整理
在Vue中,JavaScript数组常用,添加,插入,查找,删除等整理 1.splice()方法可以直接修改原数组,通过指定要删除元素的索引来删除它。 例: let index // 要删除的元素的索引; this.array.splice(i…...
树莓派上 基于Opencv 实现人脸检测与人脸识别
一,需求 基于树莓派4b,usb1080p摄像头,实现人脸检测与人脸识别。尝试了海陵科的模组和百度的sdk。海陵科的模组无法录入人脸,浪费了100多块钱。百度的sdk 在树莓派上也无法录入人脸,官方解决不了。最后只能用opencv自…...
Unity 接入Tripo 文生模型,图生模型
官方网站:https://www.tripo3d.ai/app/home自行注册账号并且登陆下载Unity插件:https://cdn-web.tripo3d.ai/plugin/tripo-unity.zip申请apikey: https://platform.tripo3d.ai/api-keys使用(后续过程就按照第二步下载的插件里面的…...
Redis常见数据结构
目录 基本介绍 特点: 全局命令 数据类型: String Hash List Set Zset 基本介绍 Redis是一个在内存中存储数据的中间件,可作为数据库,缓存,消息队列等。 特点: 持久化:Redis会把数据存储在内存中…...
fps动作系统9:动画音频
文章目录 音频单播放音频文件也是可以的,只不过是2d声音。创建音频蓝图cue(音效)音量乘数 衰减(空间效果)音量自然声音内部半径衰减距离 空间化双声道 绑定到动画动画序列轨道 音频 单播放音频文件也是可以的,只不过是2d声音。 创建音频蓝图 cue(音效…...
十四、GitLab 流水线自动化部署之 Windows Server
一、软件下载 本文章采用 Windows 版本的 Gitlab Runner 客户端,下载地址参考如下: 链接:https://pan.baidu.com/s/1nktWQGR4toRpgzEn9Qj3kQ?pwd0p1d 提取码:0p1d --来自百度网盘超级会员V7的分享 二、环境安装 1、Java 环境…...
IGP(Interior Gateway Protocol,内部网关协议)
IGP(Interior Gateway Protocol,内部网关协议) 是一种用于在一个自治系统(AS)内部传递路由信息的路由协议,主要用于在一个组织或机构的内部网络中决定数据包的最佳路径。与用于自治系统之间通信的 EGP&…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院查看报告小程序
一、开发环境准备 工具安装: 下载安装DevEco Studio 4.0(支持HarmonyOS 5)配置HarmonyOS SDK 5.0确保Node.js版本≥14 项目初始化: ohpm init harmony/hospital-report-app 二、核心功能模块实现 1. 报告列表…...
高危文件识别的常用算法:原理、应用与企业场景
高危文件识别的常用算法:原理、应用与企业场景 高危文件识别旨在检测可能导致安全威胁的文件,如包含恶意代码、敏感数据或欺诈内容的文档,在企业协同办公环境中(如Teams、Google Workspace)尤为重要。结合大模型技术&…...
相机Camera日志分析之三十一:高通Camx HAL十种流程基础分析关键字汇总(后续持续更新中)
【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了:有对最普通的场景进行各个日志注释讲解,但相机场景太多,日志差异也巨大。后面将展示各种场景下的日志。 通过notepad++打开场景下的日志,通过下列分类关键字搜索,即可清晰的分析不同场景的相机运行流程差异…...
Java入门学习详细版(一)
大家好,Java 学习是一个系统学习的过程,核心原则就是“理论 实践 坚持”,并且需循序渐进,不可过于着急,本篇文章推出的这份详细入门学习资料将带大家从零基础开始,逐步掌握 Java 的核心概念和编程技能。 …...
CRMEB 框架中 PHP 上传扩展开发:涵盖本地上传及阿里云 OSS、腾讯云 COS、七牛云
目前已有本地上传、阿里云OSS上传、腾讯云COS上传、七牛云上传扩展 扩展入口文件 文件目录 crmeb\services\upload\Upload.php namespace crmeb\services\upload;use crmeb\basic\BaseManager; use think\facade\Config;/*** Class Upload* package crmeb\services\upload* …...
JAVA后端开发——多租户
数据隔离是多租户系统中的核心概念,确保一个租户(在这个系统中可能是一个公司或一个独立的客户)的数据对其他租户是不可见的。在 RuoYi 框架(您当前项目所使用的基础框架)中,这通常是通过在数据表中增加一个…...
在Ubuntu24上采用Wine打开SourceInsight
1. 安装wine sudo apt install wine 2. 安装32位库支持,SourceInsight是32位程序 sudo dpkg --add-architecture i386 sudo apt update sudo apt install wine32:i386 3. 验证安装 wine --version 4. 安装必要的字体和库(解决显示问题) sudo apt install fonts-wqy…...
为什么要创建 Vue 实例
核心原因:Vue 需要一个「控制中心」来驱动整个应用 你可以把 Vue 实例想象成你应用的**「大脑」或「引擎」。它负责协调模板、数据、逻辑和行为,将它们变成一个活的、可交互的应用**。没有这个实例,你的代码只是一堆静态的 HTML、JavaScript 变量和函数,无法「活」起来。 …...
HubSpot推出与ChatGPT的深度集成引发兴奋与担忧
上周三,HubSpot宣布已构建与ChatGPT的深度集成,这一消息在HubSpot用户和营销技术观察者中引发了极大的兴奋,但同时也存在一些关于数据安全的担忧。 许多网络声音声称,这对SaaS应用程序和人工智能而言是一场范式转变。 但向任何技…...
