zoukankan      html  css  js  c++  java
  • 【转】Oracle索引HINT的使用

    转自: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。


  • 相关阅读:
    web service
    常用的正则表达式
    xml
    sql helper
    sql server 表连接
    asp.net页面生命周期
    创建简单的ajax对象
    checkbox选中问题
    ES6之扩展运算符 三个点(...)
    Object.assign()的用法 -- 用于将所有可枚举属性的值从一个或多个源对象复制到目标对象,返回目标对象
  • 原文地址:https://www.cnblogs.com/dorothychai/p/6233099.html
Copyright © 2011-2022 走看看