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

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

指定全局表提示

指定表的提示通常是指发生提示的DELETE,SELECT或UPDATE查询块中的表,而不是指语句引用的任何视图中的表。 如果要为显示在视图中的表指定提示,Oracle建议使用全局提示,而不是在视图中嵌入提示。 您可以使用包含具有表名的视图名称的扩展tablespec语法,将本章中描述的表提示转换为全局提示。

此外,可选的查询块名称可以在tablespec语法之前。 请参见“在提示中指定查询块”。

指定表的提示使用以下语法,其中view指定视图名称,table指定表的名称或别名:

如果指定了视图路径,则数据库将从左向右解析提示,其中第一个视图必须存在于FROM子句中,并且必须在前一视图的FROM子句中指定每个后续视图。

例3创建了一个视图v,用于返回员工的姓名,他或她的第一份工作,以及该员工在其所在部门工资最高的每位员工的所有直接报告的总工资。 在查询数据时,您希望在视图e2中强制使用索引emp_job_ix作为表e3。

示例3使用全局提示示例

CREATE OR REPLACE VIEW v 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;

通过使用全局提示结构,您可以避免使用视图主体e2中的索引提示的规范来修改视图v。 要强制使用表e3的索引emp_job_ix,可以使用以下语句之一:

SELECT /*+ INDEX(v.e2.e3 emp_job_ix) */ * FROM v;SELECT /*+ INDEX(@SEL$2 e2.e3 emp_job_ix) */ * FROM v;SELECT /*+ INDEX(@SEL$3 e3 emp_job_ix) */ * FROM v;

注意:

Oracle数据库忽略引用多个查询块的全局提示。 例如,在以下查询中忽略LEADING提示,因为它使用点表示法来包含表a和查询查询块v的主查询块:

SELECT /*+ LEADING(v.b a v.c) */ *FROM a, vWHERE a.id = v.id;

为避免此问题,Oracle建议您使用@SEL表示法在提示中指定查询块:

SELECT /*+ LEADING(A@SEL$1 B@SEL$2 C@SEL$2) */FROM a a, v vWHERE a.id = v.id;

---------------------------------------------------------------------------------------------------------------------------------

Example 4 Using Global Hints with NO_MERGE

The global hint syntax also applies to unmergeable views as in Example 19–4.

CREATE OR REPLACE VIEW v1 ASSELECT *FROM employeesWHERE employee_id < 150;CREATE OR REPLACE VIEW v2 ASSELECT v1.employee_id employee_id, departments.department_id department_idFROM v1, departmentsWHERE v1.department_id = departments.department_id;SELECT /*+ NO_MERGE(v2) INDEX(v2.v1.employees emp_emp_id_pk)FULL(v2.departments) */ *FROM v2WHERE department_id = 30;

提示导致v2不合并,并为employee和department表指定访问路径提示。 这些提示被下推到(非合并)视图v2中。

指定复杂的索引提示

指定索引的提示可以使用简单索引名称或带括号的列列表,如下所示:

语义如下:

■table指定名称

■column指定指定表中列的名称

- 列可以选择以表限定符作为前缀,允许提示指定位图连接索引,其中索引列与索引表位于不同的表上。如果存在表限定符,则它们必须是基表,而不是查询中的别名。

- 索引规范中的每个列必须是指定表中的基本列,而不是表达式。除非索引规范中指定的列形成基于函数的索引的前缀,否则不能使用列规范提示基于函数的索引。

■index指定索引名称

当tablespec在提示规范中后跟indexspec时,允许使用逗号分隔表名和索引名,但不是必需的。也允许逗号(但不是必需的)分隔多次出现的indexspec。

提示解析如下:

■如果指定了索引名称,则数据库仅考虑指定的索引。

■如果指定了列列表,并且存在其列与数字和顺序中的指定列匹配的索引,则数据库仅考虑此索引。如果不存在此类索引,则会考虑表中具有指定列作为指定顺序的前缀的任何索引。在任何一种情况下,行为都与用户在所有匹配索引上单独指定相同提示完全相同。

例如,在示例3中,job_history表在employee_id列上具有单列索引,在employee_id和start_date列上具有连接索引。要专门指示优化器使用索引,可以按如下方式提示查询:

SELECT /*+ INDEX(v.j jhist_employee_ix (employee_id start_date)) */ * FROM v;

使用视图提示

Oracle不鼓励在视图(或子查询)内部或视图(或子查询)上提示,因为您可以在一个上下文中定义视图并在另一个上下文中使用它们。此外,此类提示可能会导致意外的执行计划。特别是,视图内部或视图上的提示处理方式不同,具体取决于视图是否可合并到顶级查询中。

要为视图或子查询中的表指定提示,最好使用全局提示语法。请参见“指定全局表提示”。

如果您决定使用带有视图的提示,则以下部分将描述该行为。

提示和复杂视图

默认情况下,提示不会在复杂视图中传播。例如,如果在查询中指定一个提示来选择复杂视图,则不会遵循此提示,因为它不会被推入视图中。

除非提示位于基本视图中,否则它们可能不会受到针对视图的查询的影响。

提示和可合并的视图

可合并视图是Oracle数据库可以用定义视图的查询替换的视图。例如,假设您创建一个视图,如下所示:

CREATE OR REPLACE VIEW emp_view ASSELECT last_name, department_name FROM employees e, departments dWHERE e.department_id=d.department_id;

此视图是可合并的,因为数据库可以优化以下查询以使用定义视图的SELECT语句,从而避免使用视图本身。

SELECT * FROM emp_view;

视图中的优化方法和目标提示

优化方法和目标提示可以在顶级查询或内部视图中进行。

■如果顶级查询中存在此类提示,则数据库将使用此提示,而不管视图中是否有任何此类提示。

■如果没有顶级优化程序模式提示,则只要视图中的所有模式提示都一致,数据库就会在引用的视图中使用模式提示。

■如果引用视图中的两个或多个模式提示冲突,则数据库将丢弃视图中的所有模式提示,并使用会话模式,无论是默认还是用户指定。

访问路径和视图上的联接提示

除非视图包含单个表或引用带有单个表的Additional Hints视图,否则将忽略对引用视图的访问路径和连接提示。对于此类单表视图,视图上的访问路径提示或连接提示适用于视图内的表。

内部视图中的访问路径和连接提示

访问路径和连接提示可以显示在视图定义中。

■如果视图是内联视图(即,如果它出现在SELECT语句的FROM子句中),则当视图与顶级查询合并时,将保留视图内的所有访问路径和连接提示。

■对于非内联视图的视图,仅当引用查询不引用其他表或视图时(即,如果SELECT语句的FROM子句仅包含视图),才会保留视图中的访问路径和连接提示。

提示和不可合并的视图

使用不可合并的视图,忽略视图内的优化方法和目标提示;顶级查询决定优化模式。

由于不可合并的视图与顶级查询分开优化,因此将保留视图内的访问路径和连接提示。出于同样的原因,将忽略顶级查询中视图的访问路径提示。

但是,保留顶级查询中视图的连接提示,因为在这种情况下,不可合并的视图类似于表。

相关文章:

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

指定全局表提示 指定表的提示通常是指发生提示的DELETE&#xff0c;SELECT或UPDATE查询块中的表&#xff0c;而不是指语句引用的任何视图中的表。 如果要为显示在视图中的表指定提示&#xff0c;Oracle建议使用全局提示&#xff0c;而不是在视图中嵌入提示。 您可以使用包含具…...

功率因素和电费的关系

功率因数与电费之间存在直接的关系&#xff0c;具体体现在功率因数调整电费上。 功率因数调整电费的定义 功率因数调整电费是指根据用户功率因数的水平高低&#xff0c;对用户的电费进行减收或增收的费用。这种调整机制旨在鼓励用户提高功率因数&#xff0c;减少无功功率的消…...

桥接模式 Bridge Pattern

桥接模式Abstraction 和 Implementor 的理解 在图书馆看到一本 通过电商项目真正实战《贯穿设计模式》。拿起来翻到了 桥接模式&#xff0c;感觉味道不对&#xff0c;和我印象中不一样。 感谢这位同学提供的源码 贯穿设计模式-适配器模式桥接模式_-CSDN博客GitHub - WeiXiao…...

C# SpinLock 类 使用详解

总目录 前言 SpinLock 是 C# 中一种轻量级的自旋锁&#xff0c;属于 System.Threading 命名空间&#xff0c;专为极短时间锁竞争的高性能场景设计。它通过忙等待&#xff08;自旋&#xff09;而非阻塞线程来减少上下文切换开销&#xff0c;适用于锁持有时间极短&#xff08;如…...

Ubuntu 安装 OpenCV (C++)

版本详情&#xff1a; Ubuntu: 22.04 5.15.0-133-generic gcc: 11.4.0 g: 11.4.0 OpenCV: 4.7.0 1. 卸载 OpenCV 进入原先编译 opencv 的 build 目录&#xff0c;在该目录下打开终端&#xff0c;执行以下代码&#xff08;如果 build 已经删除了&#xff0c;可以重新编译一…...

推荐两个比较好用的流程图js库

React Flow 和 Logic Flow 是两个用于构建流程图的 JavaScript 库&#xff0c;适用于不同的场景和需求。以下是它们的简要介绍和对比&#xff1a; React Flow React Flow 是一个基于 React 的流程图库&#xff0c;专注于构建高度可定制的节点和边。它适用于需要复杂交互和数据…...

前端模板引擎

前言 正常渲染拿到数据后渲染&#xff0c;三步走&#xff1a;格式化数据、编译模板、渲染数据 如下例 <!DOCTYPE html><html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice…...

Linux /dev/null

/dev/null 是 Linux 和类 Unix 系统中一个特殊且非常有用的设备文件&#xff0c;也被称为空设备。下面为你详细介绍它的特点、用途和使用示例。 特点 写入丢弃&#xff1a;当向 /dev/null 写入数据时&#xff0c;这些数据会被立即丢弃&#xff0c;不会被保存到任何地方&#…...

ubuntu安装docker 无法拉取问题

sudo docker run hello-world [sudo] ubuntu 的密码&#xff1a; Unable to find image hello-world:latest locally docker: Error response from daemon: Get "https://registry-1.docker.io/v2/": context deadline exceeded (Client.Timeout exceeded while awai…...

深入理解Kubernetes:容器编排的中流砥柱

Kubernetes容器编排 在云原生技术蓬勃发展的当下&#xff0c;Kubernetes&#xff08;简称K8s&#xff09;已成为容器编排领域的事实标准&#xff0c;为现代应用的部署、管理与扩展提供了强大支持。 K8s的核心优势之一是其卓越的容器编排能力 在传统应用部署模式下&#xff0c;…...

长尾词SEO优化软件:企业官网流量提升的软件【实测】

搜索引擎流量中68%来自长尾关键词&#xff08;数据来源&#xff1a;Ahrefs 2025&#xff09;&#xff0c;但83%企业仍困于「高价值长尾词难挖掘内容生产跟不上」的双重困境。当同行用智能工具批量布局「孕妇防辐射服哪个牌子好」等精准词时&#xff0c;手动分析数据的你可能还在…...

用自己的数据训练yolov11目标检测

文章目录 概要理论知识整体架构流程架构优化多任务支持多参数体量 操作实操环境配置数据准备数据标注数据放置路径 训练预测 概要 YOLOv11 是 Ultralytics 团队于 2024 年 9 月 30 日发布的最新目标检测模型&#xff0c;延续了 YOLO 系列实时推理特性&#xff0c;同时通过架构优…...

gsoap实现webservice服务

gsoap实现webservice服务 在实现Web服务时&#xff0c;使用gSOAP是一个很好的选择&#xff0c;因为它提供了强大的工具和库来创建SOAP和RESTful服务。gSOAP是一个C和C语言开发的库&#xff0c;它支持SOAP协议的各种版本&#xff0c;包括SOAP 1.1和SOAP 1.2。下面是如何使用gSO…...

相比于WebSocket,SSE更适合轻量级

一、 前言 项目首页有一个待办任务数量和消息提醒数量的展示&#xff08;单向数据的展示 &#xff09;&#xff0c;之前使用了定时器&#xff0c;每隔十秒钟发送一次请求到后端接口拿数据&#xff0c;这也就是我们常说的轮询做法。 1. 轮询的缺点 我们都知道轮询的缺点有几种…...

项目2 数据可视化--- 第十五章 生成数据

数据分析是使用代码来探索数据内的规律和关联。 数据可视化是通过可视化表示来 探索和呈现数据集内的规律。 好的数据可视化&#xff0c;可以发现数据集中未知的规律和意义。 一个流行的工具是Matplotlib&#xff0c;他是一个数据绘图库&#xff1b; 还有Plotly包&#xff…...

【Maven私服配置】

Maven私服配置 对于一些中央的pom&#xff0c;应该配置对应的mirror镜像访问 <mirrors> <mirror> <id>alimaven</id> <name>aliyun maven</name> <url>http://maven.aliyun.com/nexus/content/groups/public/</url> <mirr…...

QT (四)模型/视图 QFileSystemModel,QStringListModel,QStandardItemModel

思考&#xff1a;QTableWidget 在某种程度上可以等价为QStandardItemModel&#xff0c;同理&#xff0c;其他的功能也有类似的等价&#xff0c;但是以当前的QTableWidget 和QStandardItemModel为例的话&#xff0c;两者都是用于实现建立表格的相关组件&#xff0c;只不过QStand…...

BSD实现:单播

分用单播数据报 如果程序执行到这里&#xff0c;说明程序并没有执行多播操作&#xff0c;那么大概率是单播。 维护缓存指针 udp_last_inpcb是上一次接收数据报的端口的控制块指针&#xff0c;维护该指针的依据是许多程序往往具有时间局部性&#xff0c;也就是&#xff1a;经…...

. Unable to find a @SpringBootConfiguration(默认软件包中的 Spring Boot 应用程序)

解决&#xff1a; 新建一个包即可 问题&#xff1a; 默认软件包中的 Spring Boot 应用程序。 原因&#xff1a; 默认包的定义 &#xff1a; 如果一个 Java 类没有使用 package 声明包名&#xff0c;则该类会被放置在默认包中。Spring Boot 遵循 Java 的包管理约定&#xff…...

【前端知识】浏览器兼容方案polyfill

浏览器兼容方案polyfill 什么是 Polyfill&#xff1f;Polyfill 的作用Polyfill 的工作原理1. **特性检测**2. **加载 Polyfill**3. **模拟实现** Polyfill 的常见场景Polyfill 的使用方式Polyfill 的优缺点优点缺点 常见的 Polyfill 库总结 什么是 Polyfill&#xff1f; Polyf…...

互信息的定义与公式

互信息 定义公式 从条件熵中我们知道&#xff0c;当获取的信息和要研究的食物”有关系时“&#xff0c;这些信息才能帮助我们消除不确定性。如何衡量获取信息和要研究事物“有关系”呢&#xff1f;比如常识告诉我们&#xff0c;一个随机事件“今天深圳下雨”和另一个随机事件“…...

(算法基础——树)——python树结构使用指南

1. 树的定义与实现 树是一种非线性数据结构&#xff0c;常用于解决层次化数据问题&#xff08;如路径搜索、二叉树遍历等&#xff09;。以下是树的两种常见实现方式&#xff1a; (1) 类&#xff08;Class&#xff09;实现 class TreeNode:def __init__(self, val0, leftNone…...

【小白学AI系列】NLP 核心知识点(七)Embedding概念介绍

Embedding&#xff08;嵌入&#xff09; 是自然语言处理&#xff08;NLP&#xff09;中非常重要的概念。简单来说&#xff0c;embedding 是一种将离散的、稀疏的、不可直接计算的对象&#xff08;比如词、字符或句子&#xff09;转换为 密集的、连续的向量表示 的技术。 这个向…...

Android adb测试常用命令大全

目录 一、查看最上层成activity名字: 二、查看Activity的任务栈&#xff1a; 三、获取安装包信息 四、性能相关 1、显示CPU信息 : 2、查看CPU使用信息 3、内存信息&#xff08;meminfo package_name or pid 使用程序的包名或者进程id显示内存信息&#xff09; 4、电量信…...

FRRouting配置与OSPF介绍,配置,命令,bfd算法:

文章目录 1、frrouting的配置&#xff1a;2、ospf2.1、检测和维护邻居关系2.2、ospfDR和BDR2.3、odpf邻居表2.4、ospf常用命令2.5、bfd配置 1、frrouting的配置&#xff1a; sudo service zebra start sudo service ospfd start telnet localhost 2604 en configure termina…...

【MyBatis】预编译SQL与即时SQL

目录 1. 以基本类型参数为例测试#{ }与${ }传递参数的区别 1.1 参数为Integer类型 1.2 参数为String类型 2. 使用#{ }传参存在的问题 2.1 参数为排序方式 2.2 模糊查询 3. 使用${ }传参存在的问题 3.1 SQL注入 3.2 对比#{ } 与 ${ }在SQL注入方面存在的问题 3.3 预编译…...

prometheus、grafana、windows、node exporter 安装包

开发过程中应用到的安装包软件&#xff1a; prometheus-2.20.0.windows-amd64.tar.gz windows_exporter-0.13.0-amd64.exe grafanawindows-x64.zip influxdb-1.7.0_windows_amd64.zip 我用夸克网盘分享了「prometheus、grafana、windows、node exporter 安装包」&#xff…...

Python数据可视化 - Matplotlib教程

文章目录 前言一、Matplotlib简介及安装1. Matplotlib简介2. 安装Matplotlib 二、Matplotlib Pyplot1. Pyplot介绍2. Pyplot中方法介绍2.1 创建和管理图形2.2 绘制图形2.3 设置图形属性2.4 保存和展示 三、Matplotlib绘图标记1. 介绍2. 基本用法3. 标记大小与颜色4. 标记样式列…...

DeepSeek R1 与 OpenAI O1:机器学习模型的巅峰对决

我的个人主页 我的专栏&#xff1a;人工智能领域、java-数据结构、Javase、C语言&#xff0c;希望能帮助到大家&#xff01;&#xff01;&#xff01;点赞&#x1f44d;收藏❤ 一、引言 在机器学习的广袤天地中&#xff0c;大型语言模型&#xff08;LLM&#xff09;无疑是最…...

内容中台重构企业内容管理流程驱动智能协作升级

内容概要 内容中台作为企业数字化转型的核心基础设施&#xff0c;通过技术架构革新与功能模块整合&#xff0c;重构了传统内容管理流程的底层逻辑。其核心价值在于构建动态化、智能化的内容生产与流转体系&#xff0c;将分散的创作、存储、审核及分发环节纳入统一平台管理。基…...