`

use_hash

阅读更多

/*+ USE_HASH(TABLE) */ use_hash提示对指定的标志性一个散列连接。
将指定的表与其他行源通过哈希连接方式连接起来.
        从本质上讲,散列连接是Oracle用以驱动表(最小的表,where 子句中的第一个表)向RAM区中装载纪录
    的方法,RAM区是由hash_area_size初始化参数定义的。
        然后,Oracle使用散列的方法定位第二小的表中的纪录。在两个表都非常大的情况下,散列连接通常
    与并行查询结合使用。

    例如:
       SELECT /*+ USE_HASH(TA,TB) parallel(TA,4) parallel(TB,4) */
         FROM BSEMPMS TA,
              BSDPTMS TB
        WHERE TA.DPT_NO=TB.DPT_NO;
    分析:
       装入小表(BSEMPMS)到RAM,使用RAM中的行ID进行散列访问大表(BSDPTMS)。
    说明:
       散列连接通常快于嵌套循环连接,特别是在驱动表已经在查询的where子句中过滤,只剩下少量记录的
       情况。
    前提:
       A、检查初始化参数
          确保正确设置optimozer_index_cost_adj、hash_multiblock_io_count、optimozer_max_permutations
          和hash_area_size参数。
       B、检察驱动表
          确保最小的表作为驱动表(from子句中的第一个表).这是因为散列连接使用驱动表创建内存数组。
       C、分析CBO统计资料
          确保对表和(或)连接表字段的统计资料进行过正确的分析。
       D、检察分布不均匀的字段
          推荐仅对不均匀的分配使用字段矩形图。
       E、检察RAM区
          确保hash_area_size大到可以容纳内存中较小的表。否则,Oracle必然会将写入temp表空间,降低
          散列连接的速度。
/*+ USE_MERGE(TABLE) */ 将指定的表与其他行源通过合并排序连接方式连接起来
use_merge提示强制执行—个排序合并操作。排序合并操作通常与并行查询结合使用,因为排序合并连接对
   表执行全表扫描。排序合并连接最适用于生成大型结果集的查询.
       例如日常报表和表细节总结查询,或用来处理不使用连接主键索引的表。

    例如:
    SELECT /*+ USE_MERGE(BSEMPMS,BSDPTMS) */
      FROM BSEMPMS,
           BSDPTMS
     WHERE BSEMPMS.DPT_NO=BSDPTMS.DPT_NO;
    注意:
        排序合并连接并不使用索引来连接这些表。在大多数情况下,索引访问会更快。但是排序合并连接
    可能最适合于不使用where子句的大连接表,或表中无索引的查询。
/*+ USE_NL(TABLE) */将指定表与嵌套的连接的行源进行连接,并把指定表作为内部表.
强制对目标表执行嵌套循环连接。与其他方式的连接提示不同,use_nl提示只需驱动表的名称(使用CBO时,
   from子句的第一个表)。嵌套循环连接是最古老的连接方式,它几乎总是基于规则的优化方式(也就是RULE
   提示)共同使用。

    例如:
    SELECT /*+ORDERED USE_NL(BSEMPMS)*/
           BSDPTMS.DPT_NO,BSEMPMS.EMP_NO,BSEMPMS.EMP_NAM
      FROM BSEMPMS,
           BSDPTMS
     WHERE BSEMPMS.DPT_NO=BSDPTMS.DPT_NO;
/*+ START */ 强制使用星型查询计划
前提是查询中存在至少三个表,而且在事实表中存在恰当的索引。Star提示比传统的连接方式快得多,传统
   的连接方式首先将最小的引用表与事实表连接,再将其他的引用表与中间生成表连接。
   前提:
      A、必须存在连接在一起的至少三个表,其中有——个大的事实表和几个小维表。
      B、在事实表的字段上必须存在一个索引,这些字段将是每个表的连接主键。从Oracle8i开始,你需要
         使用位图索引,而不是连接在一起的索引。
      C、你必须检验执行计划,以确保在执行连接时使用嵌套循环操作。

   原理:
      1、将维表装入内存
      2、将事实表使用连锁索引连接
      3、产生查询结果
/*+ MERGE_AJ */ 放到NOT IN 子查询中反向连接
在使用全表访问比索引访问更好的情况下,我们可以在not in子查询中使用merge_aj提示,以方便于执行
   反向连接。
   警告:
      只有在not in 子句中要求的字段有非空限制的时候,反连接提示merge_ah和hash_aj才起作用。
  
   例如:
      select dname
        from dept
       where deptno not in (select /*+ merge_aj */ deptno
                              from emp
                             where job='SALESMAN');

/*+ HASH_AJ */ 放到NOT IN 子查询中进行散列反向连接
/*+ INDEX_JOIN(TABLE INDEX_NAME) */ 提示明确命令优化器使用索引作为访问路径.
例如:
   SELECT /*INDEX_JOIN(BSEMPMS SAL_HMI HIREDATE_BMI)*/
          Sal,
          Hiredate
     FROM Bsempms
    WHERE Sal < 60000;
/*+ ADD_EQUAL TABLE INDEX_NAM1,INDEX_NAM2,... */将几个单列索引的扫描合起来.
如果表拥有非惟一的单独字段索引,而且你期望使用多个索引服务于该查询,那么可以使用and_equal
    提示。它将合并这些索引,并使这些单独索引操作时就象耽搁连锁索引一样。
   
    前提:
       需要指定表名和至少两个索引名,但是索引名不能操作5个。
    例如:
    SELECT /*+ INDEX_FFS(BSEMPMS IN_DPTNO,IN_EMPNO,IN_SEX) */
      FROM Bsempms
     WHERE Emp_No = 'SCOTT'
       AND Dpt_No = 'TDC306';
/*+ no_index */ 提示强制优化器忽略索引的存在


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/dinanzhang/archive/2008/03/26/2221288.aspx

分享到:
评论

相关推荐

    oracle的hint函数

    介绍了oracle中的hint,常用的 ordered、use_nl、use_hash、index、full 五种, 给出使用实例和适用场景

    Oracle 语句优化

    用於Oracle語句優化,在SQL語句優化過程中,我們經常會用到Hint,這個文檔總結SQL優化過程中常見的Oralce HINT 的用法

    oracle性能优化文档

    oracle实例性能优化方法工具介绍,oracle性能优化,这是oracle性能优化部分,官方的是英文,此资源是中文版

    让Oracle跑得更快 Oracle 10g性能分析与优化思路.part2.rar

    6.4.1 use_hash,use_nl和use_merge hint 127 6.4.2 no_use_hash hint 132 6.4.3 no_use_merge hint 133 6.4.4 no_use_nl hint 133 6.5 并行执行相关的hint 134 6.5.1 parallel hint 134 6.5.2 no_parallel hint 134...

    让Oracle跑得更快 Oracle 10g性能分析与优化思路.part1.rar

    6.4.1 use_hash,use_nl和use_merge hint 127 6.4.2 no_use_hash hint 132 6.4.3 no_use_merge hint 133 6.4.4 no_use_nl hint 133 6.5 并行执行相关的hint 134 6.5.1 parallel hint 134 6.5.2 no_parallel hint 134...

    SQLServer性能优化–间接实现函数索引或者Hash索引

    另外一个就是如果查询字段较大或者字段较多的时候,所建立的索引就显得有点笨重,效率也不高,就需要考虑使用一个较小的”替代性”字段做等价替换,类似于Hash索引, 本文粗浅地介绍两种上述两种问题的解决方式,仅...

    Cmake编译生成的dll文件缺少libopencv-world450.dll和opencv-videoio-ffmpeg-64

    #match_hash_in_cmake_cache "OCV_DOWNLOAD_ADE_HASH_3rdparty_ade_v0_1_2d_zip" #match_hash_in_cmake_cache "OCV_DOWNLOAD_FFMPEG_HASH_3rdparty_ffmpeg_opencv_videoio_ffmpeg_dll" #do_copy "opencv_videoio_...

    ora分析脚本

    - hash_to_sqlid &lt;sql_id&gt; : get the sql_id of the cursor given its hash value - sqlid_to_hash &lt;sql_id&gt;: get the hash value of the cursor given its (unquoted) sql_id - exptbs: generate export ...

    Hash计算器

    好用的Hash工具 abnormal_recovery: 0 boot: cd bootdisk: ide0 cfgstorage: local cores: 1 cpu: core2duo dir: 9882a70378e6 host: host-00900b24b834 ide0: local:vm-disk-1.qcow2,cache=directsync,preallocate=...

    semantic_hash.pdf

    When the deepest layer is forced to use a small number of binary variables (e.g. 32), the graphical model performs “semantic hashing”: Documents are mapped to memory addresses in such a way that...

    uthash hash string

    Just add a UT_hash_handle to the structure and choose one or more fields in your structure to act as the key. Then use these macros to store, retrieve or delete items from the hash table

    SQL性能优化

     USE_HASH(使用HASH JOIN方式联合)  索引提示:  INDEX(TABLE INDEX)(使用提示的表索引进行查询)  其它高级提示(如并行处理等等) 1.5 索引的规则: 建立索引常用的原则如下: 1. 表的主键、外键必须...

    检索图像和搜索,相似性学习,比较深度度量和深度散列在图像检索 中的应用_Jupyter_python_代码_下载

    DeepEmbedding空间使用第一个搜索空间研究(DeepMetric)深度哈希(DeepHash)的空间映射函数,将空间空间的学习映射到低维嵌入引擎的空间映射函数。抽取特征,即本次实验研究的第二个问题,第二个问题为特征搜索...

    rust编写的hash头像生成库

    rust_hash_avatarrust编写的hash头像生成库在https://crates.io中查看use hash_avatar::Generator;fnmain() { Generator::new() .create() .save_to_png("fractal.png") .unwrap(); Generator::new() .set_img...

    use-hash-param:React钩子用于处理URL片段中的参数

    安装npm install --save use-hash-param用法import React from 'react' ;import useHashParam from 'use-hash-param' ;function ControlledInput ( ) { const [ name , setName ] = useHashParam ( 'name' ) ; ...

    twox-hash:XXHash算法的Rust实现

    use std :: hash :: BuildHasherDefault; use std :: collections :: HashMap; use twox_hash :: XxHash64; let mut hash: HashMap &lt; _, _, BuildHasherDefault &lt; XxHash64&gt;&gt; = Default :: default (); hash. ...

    mathematica-keygen_mathematica_keygen_

    Widely admired for both its technical prowess and elegant ease of use

    code that demonstrates the use of the hash tables

    useHashTables.cpp -- code that demonstrates the use of the hash tables

    用于计算图像感知哈希值的 Rust 库

    img_hash现在建立在稳定的 Rust 之上!(但需要每晚坐凳。)用于获取图像感知哈希值的库...use img_hash:: {HasherConfig, HashAlg};fnmain () {let image1= image::open ("image1.png" ).unwrap ();let image2= image:

    String Hash algorithm, 字符串HASH算法

    list some String Hash algorithm, you can use it directly.

Global site tag (gtag.js) - Google Analytics