转自:Oracle索引HINT的使用

      存储在数据库中数据的分布情况开发人员或管理员比Oracle优化器更加的清楚,在优化器不能作出最有查询路径选择的情况下,使用HINT(提示)人为的固定查询路径,一定程度能生成更优的执行计划。
        在SQL的查询过程中,索引是快速查询数据的方法之一,是最重要、最常见的手段,这篇文章将讨论和索引相关的HINT的使用。
1.HINT的使用方法:
select /*+ INDEX (tab pk_tab)*/ * from test.tab;
        上面是一个使用HINT简单例子,其中tab是表的名称,pk_tab是索引的名称,如果表有别名,那么应该使用别名。如果表名的前面包含模式名,那么在INDEX的使用过程中不需要指定模式的名称,只需要指定表名即可。
2.HINT提示:
         在Oracle数据库中索引的使用包括:索引范围扫描、索引跳跃扫描、索引快速全扫描。下面讨论Oracle数据库有关索引的提示,如下表所示,列出了不同扫描方法是用的提示:

索引 索引范围扫描 索引跳跃扫描 索引快速全扫描
index index_rs index_ss index_ffs
index_asc no_index_rs no_index_ss no_index_ffs
index_desc index_rs_asc index_ss_asc index_asc
index_rs_desc index_ss_desc index_desc

下面举例说明不同索引HINT的使用:
1).使用索引。
select /*+ INDEX(tab pk_tab)*/ from tab;
        对于这样一条SQL,查询使用索引pk_tab,至于如何扫描索引是Oracle自己决定的。如果能确定使用何种扫描方式最快,可以明确索引的扫描方式:
select /*+ INDEX_RS(tab pk_tab)*/ from tab;
select /*+ INDEX_SS(tab pk_tab)*/ from tab;
select /*+ INDEX_FFS(tab pk_tab)*/ from tab;
2).不使用索引。
select /*+ NO_INDEX_RS(tab pk_tab)*/ from tab;
        对于这样一条SQL,查询不使用索引范围扫描,那么将使用表的全表扫描,根据情况还可以使用NO_INDEX_SS和NO_INDEX_FFS,不使用索引跳跃扫描和索引快速全扫描,这样将使用表的全表扫描。
3).正排序使用索引。
select * from tab order by id;
        对于这样一条SQL,排序使用的正序,那么可以使用*_asc相关的HINT,例如,select /*+ INDEX_ASC(tab pk_tab)*/ * from tab order by id;INDEX_ASC表示的是按照正向顺序扫描索引。根据不同的情况还可以使用其他扫描类型的*_ASC。
4).倒排序使用索引。
select * from tab order by id desc;
        对于这样一条SQL,排序使用的倒序,那么可以使用*_desc相关的HINT,例如,select /*+ INDEX_DESC(tab pk_tab)*/ from tab order by id desc;INDEX_DESC表示的是按照倒向顺序扫描索引。根据不同的情况还可以使用其他扫描类型的*_DESC。
        如果索引中包含了查找的所有列,或者说索引的列就能满足查询需要,就可以使用索引快速全扫描相关的HINT。

 

【转】Oracle索引HINT的使用的更多相关文章

  1. Oracle索引HINT的使用

    存储在数据库中数据的分布情况开发人员或管理员比Oracle优化器更加的清楚,在优化器不能作出最有查询路径选择的情况下,使用HINT(提示)人为的固定查询路径,一定程度能生成更优的执行计划.       ...

  2. Oracle索引梳理系列(九)- 浅谈聚簇因子对索引使用的影响及优化方法

    版权声明:本文发布于http://www.cnblogs.com/yumiko/,版权由Yumiko_sunny所有,欢迎转载.转载时,请在文章明显位置注明原文链接.若在未经作者同意的情况下,将本文内 ...

  3. oracle 索引失效原因及解决方法

    oracle 索引失效原因及解决方法 2010年11月26日 星期五 17:10 一.以下的方法会引起索引失效 ‍1,<>2,单独的>,<,(有时会用到,有时不会)3,like ...

  4. oracle索引优化

    零.概述 在这之前,一直都是使用mysql来进行开发或者部署.最近及今后很长一段时间都要使用oracle,今天和同事也遇到一个oracle 慢查询问题.查了很多资料,这里记录备忘.持续更新ing... ...

  5. Oracle 索引扫描的五种类型

    之前在讨论CBO和RBO的时候提到了索引扫描的几种类型. Oracle Optimizer CBO RBO http://blog.csdn.net/tianlesoftware/archive/20 ...

  6. Oracle 常见hint

    Hints 应该慎用,收集相关表的统计信息,根据执行计划,来改变查询方式 只能在SELECT, UPDATE, INSERT, MERGE, or DELETE 关键字后面,只有insert可以用2个 ...

  7. oracle索引监控

    目的:监控oracle索引的有效性,看索引有没有被使用.然后根据监控结果删除或者调整索引. 步骤: 1.监控指定索引 命令: alter index  索引名 monitoring usage;  如 ...

  8. Oracle索引重建

    一.前言 Oracle建议对于索引深度超过4级以及已删除的索引条目至少占有现有索引条目总数的20% 这2种情形下需要重建索引.有人持不同观点,就是强烈建议不要定期重建索引.索引重建是一个争论不休被不断 ...

  9. 【转】Oracle索引的类型

    数据库的应用类型分为 OLTP(OnLine Transaction Processing ,联机事务处理):OLTP是传统关系型数据库的主要应用,其主要面向基本的.日常的事务处理,例如银行交易. O ...

随机推荐

  1. iOS中assign,copy,retain之间的区别以及weak和strong的区别

    @property (nonatomic, assign) NSString *title; 什么是assign,copy,retain之间的区别? assign: 简单赋值,不更改索引计数(Refe ...

  2. [每日一记] Python报错 综述

    提纲 -- Syntax errors -- Static semantic errors -- Full semantic errors -- 使用一门语言,不论是自然语言还是编程语言,我们需要注意 ...

  3. JavaScript 常用正则表达式

    ==========================正则表达式=========================== 常用元字符 代码 说明 . 匹配除换行符以外的任意字符 \w 匹配字母或数字或下划 ...

  4. python --enable-shared

    https://github.com/docker-library/python/issues/21 例如编译安装python3.5.2,脚本如下: wget https://s3.cn-north- ...

  5. [转] 有java基础的人如何转行做大数据?

    数据有两个方向,一个是偏计算机的,另一个是偏经济的.你学过Java,所以你可以偏将计算机基础1. 读书<Introduction to Data Mining>,这本书很浅显易懂,没有复杂 ...

  6. 设计模式--装饰模式Decorate(结构型)

    一.装饰模式 动态地给一个对象添加额外的职责.就增加功能来说,装饰模式相比生成子类更为灵活.有时我们希望给某个对象而不是整个类添加一些功能. 二.UML图 1.Component(概念中提到的对象接口 ...

  7. jQuery根据name取input值问题

    最近做项目用$("input[name=inputName]").val();去取input值得时候发现取值有问题:总是取第一次输入的值,如果在同一个页面不发生表单提交,然后将in ...

  8. POJ 2533 Longest Ordered Subsequence LCS O(n*log(n))

    题目链接 最长上升子序列O(n*log(n))的做法,只能用于求长度不能求序列. #include <iostream> #define SIZE 1001 using namespace ...

  9. 移动wap隐藏的坑

    非原创,只做转载 ------------------------------------------------------------------------------------------- ...

  10. git 学习

    一.bash中查看已经提交的文件:git ls-files 二.返回上级目录:cd ..     (中间含空格) 三.在当前目录下新建文件夹: mkdir dirName 新建文件:touch new ...