`
llyzq
  • 浏览: 585267 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

五分钟精通Oracle Hints

 
阅读更多
转自 http://database.51cto.com/art/200911/163085.htm

在向大家详细介绍Oracle Hints之前,首先让大家了解下Oracle Hints是什么,然后全面介绍Oracle Hints,希望对大家有用。基于代价的优化器是很聪明的,在绝大多数情况下它会选择正确的优化器,减轻了DBA的负担。但有时它也聪明反被聪明误,选择了很差的执行计划,使某个语句的执行变得奇慢无比。

此时就需要DBA进行人为的干预,告诉优化器使用我们指定的存取路径或连接类型生成执行计划,从而使语句高效的运行。例如,如果我们认为对于一个特定的语句,执行全表扫描要比执行索引扫描更有效,则我们就可以指示优化器使用全表扫描。在Oracle中,是通过为语句添加 Hints(提示)来实现干预优化器优化的目的。

Oracle Hints是一种机制,用来告诉优化器按照我们的告诉它的方式生成执行计划。我们可以用Oracle Hints来实现:
1) 使用的优化器的类型
2) 基于代价的优化器的优化目标,是all_rows还是first_rows。
3) 表的访问路径,是全表扫描,还是索引扫描,还是直接利用rowid。
4) 表之间的连接类型
5) 表之间的连接顺序
6) 语句的并行程度

除了”RULE”提示外,一旦使用的别的提示,语句就会自动的改为使用CBO优化器,此时如果你的数据字典中没有统计数据,就会使用缺省的统计数据。所以建议大家如果使用CBO或Hints提示,则最好对表和索引进行定期的分析。

如何使用Hints:

Hints只应用在它们所在sql语句块(statement block,由select、update、delete关键字标识)上,对其它SQL语句或语句的其它部分没有影响。如:对于使用union操作的2个 sql语句,如果只在一个sql语句上有Hints,则该Hints不会影响另一个sql语句。

我们可以使用注释(comment)来为一个语句添加Hints,一个语句块只能有一个注释,而且注释只能放在SELECT, UPDATE, or DELETE关键字的后面

使用Oracle Hints的语法:

{DELETE|INSERT|SELECT|UPDATE} /*+ hint [text] [hint[text]]... */

or

{DELETE|INSERT|SELECT|UPDATE} --+ hint [text] [hint[text]]...

注解:
1) DELETE、INSERT、SELECT和UPDATE是标识一个语句块开始的关键字,包含提示的注释只能出现在这些关键字的后面,否则提示无效。
2) “+”号表示该注释是一个Hints,该加号必须立即跟在”/*”的后面,中间不能有空格。
3) hint是下面介绍的具体提示之一,如果包含多个提示,则每个提示之间需要用一个或多个空格隔开。
4) text 是其它说明hint的注释性文本

如果你没有正确的指定Hints,Oracle将忽略该Hints,并且不会给出任何错误。
分享到:
评论

相关推荐

    oracle hints详细介绍

    ### Oracle Hints 详解 #### 一、Oracle Hints 概述 在Oracle数据库中,Hints(提示)是一种特殊的语法,允许用户直接控制SQL语句的执行计划,从而实现更高级别的性能调优。通常情况下,Oracle的优化器能够根据...

    oracle HINTS用法

    ### Oracle Hints用法详解 Oracle Hints是Oracle数据库中一种非常实用的功能,它允许用户在SQL语句中提供优化器提示,以便更好地控制查询执行计划。这些提示可以帮助数据库优化器选择更有效的路径来执行查询,从而...

    Oracle的hints调整机制介绍

    Oracle的Hints调整机制是数据库管理员和开发人员用来指导Oracle Cost-Based Optimizer(CBO)做出更符合预期执行计划的一种方式。Hints是一种在SQL查询中插入的特殊注释,用于告诉Oracle如何优化查询路径,以提高...

    解析Oracle Hints.

    ### 解析Oracle Hints #### 摘要 在现代软件开发过程中,数据库优化成为确保应用程序性能的关键步骤之一。尤其对于大规模系统来说,SQL查询优化的重要性不言而喻。Oracle数据库作为市场上主流的企业级数据库之一,...

    oracle-hints.rar_oracle

    标题“oracle-hints.rar_oracle”暗示了这个压缩包包含的是关于Oracle Hints的相关资料,可能是文档、示例或者教程,旨在帮助用户理解和掌握如何在Oracle数据库中使用Hints来优化SQL查询。 描述中的"sql error can ...

    Oracle 常用 hints 说明

    hints 使用的好的話很好用。在进行sql执行过程中,由于有时候系统自动优化的方式并不是最优的。需要我们手工添加hint来提高查询效率。

    Hints优化.pdf

    Oracle Hints是Oracle数据库中一种用于优化SQL查询的工具。它们允许数据库管理员和开发人员提供关于如何执行SQL语句的提示,以此来改善查询性能。Oracle Hints在处理复杂SQL语句或特定类型的数据库操作时尤其有用,...

    oracle sql 语句暗示 hints

    ### Oracle SQL 语句暗示 (Hints) 全面解析 #### 一、引言 在当前企业级应用环境中,为了实现成本控制与性能优化的目标,高效编写应用程序变得尤为重要。这不仅涉及程序的设计与实现,还包括运行时资源的有效利用...

    oracle_hints

    在Oracle中,"hints"是一个强大的工具,它允许数据库管理员和开发人员对查询优化器(Query Optimizer)进行指导,以影响其选择执行计划。在本文中,我们将深入探讨Oracle中的hints机制,以及如何有效地使用它们来...

    Oracle SQL Hints

    Oracle SQL Hints是一种在Oracle数据库中用于优化SQL语句执行计划的辅助手段。通过在SQL语句中嵌入特定的指令,即HINT,可以向Oracle优化器强制指示使用特定的访问路径、关联方法等,以便绕过优化器的默认选择,从而...

    oracle 启动过程详解

    这个过程可以通过 strings 命令查看 oracle 可执行文件中的字符文本,以获取更多的信息,例如一些 Oracle 未公开的 Hints 信息、数据库字典基表创建信息等。 启动数据库到 Mount 状态 在 Nomount 状态下,Oracle ...

    Oracle和SqlServer语法区别

    SELECT [/*+ optimizer_hints*/] [ALL | DISTINCT] select_list FROM {table_name | view_name | select_statement} [WHERE clause] [GROUP BY group_by_expression] [HAVING search_condition] [START WITH U ...

    【oracle】oracle查询优化改写

    5. **提示(Hints)**:在SQL查询中添加提示可以指导优化器选择特定的执行计划,但这应谨慎使用,因为过度依赖提示可能导致其他问题。 在"Oracle_chaxunyouhuagaixiejiqiaoyuanli_20180929.pdf"这份文档中,可能会...

    ORACLE和SQL Server的语法区别

    SELECT /*+ optimizer_hints */ [ALL|DISTINCT] select_list FROM {table_name|view_name|select_statement} WHERE clause GROUP BY group_by_expression HAVING search_condition START WITH U CONNECT BY {...

    Oracle内部培训汇总

    4. **HINTs**:Oracle的HINTs允许开发人员对优化器提供指导,强制其采用特定的执行策略。这在解决复杂查询或特定场景下的性能问题时很有用,但过度依赖HINTs可能会降低系统的可维护性。 5. **索引(INDEX)**:索引...

    Oracle 中HINT的使用

    以下是关于Oracle HINTs使用的一些关键知识点: 1. **HINT基本结构**:HINT以`/*+ ... */`的形式插入到SQL语句中,其中“...”部分是具体的HINT名称或参数。例如,`/*+ INDEX(emp Emp_PK) */`指示Oracle使用名为Emp...

    MySQL VS ORACLE.pdf

    对于查询优化,Oracle提供了丰富的提示(hints)来指导优化器,而MySQL使用force index/use index来优化查询。Oracle的查询缓存能够存储SQL语句的执行结果,而MySQL的查询缓存功能较弱,通常只能在存储过程中使用。 ...

Global site tag (gtag.js) - Google Analytics