zoukankan      html  css  js  c++  java
  • sql 查询强制使用HASH连接性能测试比较

    HASH JOIN 散列连接
    hash join是CBO 做大数据集连接时的常用方式。优化器扫描小表(或数据源),利用连接键(也就是根据连接字段计算hash 值)在内存中建立hash表,然后扫描大表,每读到一条记录就来探测hash表一次,找出与hash表匹配的行。
    当小表可以全部放入内存中,其成本接近全表扫描两个表的成本之和。如果表很大不能完全放入内存,这时优化器会将它分割成若干不同的分区,不能放入内存的部分就把该分区写入磁盘的临时段,此时要有较大的临时段从而尽量提高I/O 的性能。临时段中的分区都需要换进内存做hash join。这时候成本接近于全表扫描小表+分区数*全表扫描大表的代价和。
    (对以上的过程保持疑问,可能是RDMS的问题,在《数据库系统概念》一书中,hash join算法的思想是这样的:对两个关系的连接属性分别作hash,hash函数一定要有较好的随机性和均匀性,如果关系r的一个元组和关系s的一个元组满足连接条件,那么他们在连接属性 上有相同的值。如该值经散列函数映射为i,则关系s的那个元组必在H(ri)中,而关系s的那个元组必在H(si)中。因此,H(ri)中的元组只需与H(si)中的元组作比较,而没有必要与s的其他任何分区作比较。很明显这种算法比以上算法代价小的多。)

        至于两个表都进行分区,其好处是可以使用parallel query,就是多个进程同时对不同的分区进行join,然后再合并。但是复杂。

    hash join可能有优势:
    1,两个巨大的表之间的连接。
    2,在一个巨大的表和一个小表之间的连接。
    3,可用ordered提示来改变CBO默认的驱动表,可用USE_HASH(table_name1 table_name2)提示来强制使用hash join

    1.散列连接是CBO做大数据集连接时的常用方式.

    2.也可以用USE_HASH(table_name1 table_name2)提示来强制使用散列连接

    3.Hash join在两个表的数据量差别很大的时候.

    4.Hash join的工作方式是将一个表(通常是小一点的那个表)做hash运算,将列数据存储到hash列表中,从另一个表中抽取记录,做hash运算,到hash列表中找到相应的值,做匹配。

    当缺乏索引或者索引条件模糊时,哈希连接连接比嵌套循环有效。通常比排序合并SORT MERGE JOIN连接快。

    在数据仓库环境下,如果表的纪录数多,效率高。

     
    参考地址:http://blog.csdn.net/chengweipeng123/article/details/7235387
     
    以下是自己做的一个小测试
    hash查询: IO结果sql <wbr>查询强制使用HASH连接性能测试比较
    hash查询: time结果
    sql <wbr>查询强制使用HASH连接性能测试比较
    -----------------------------------------------------------------------------------------------------------------------
    NOT hash查询: IO结果
    sql <wbr>查询强制使用HASH连接性能测试比较
    NOT hash查询: time结果
    sql <wbr>查询强制使用HASH连接性能测试比较
  • 相关阅读:
    20080619 SQL SERVER 输入 NULL 的快捷键
    20090406 Adobe的“此产品的许可已停止工作”错误的解决办法
    20080908 Office Powerpoint 2007 不能输入中文的解决办法
    20080831 ClearGertrude Blog Skin 's cnblogs_code class
    20080603 Facebook 平台正式开放
    20080519 安装 Microsoft SQL Server 2000 时提示 创建挂起的文件操作
    test
    Linux—fork函数学习笔记
    SOA的设计理念
    Why BCP connects to SQL Server instance which start with account of Network Service fail?
  • 原文地址:https://www.cnblogs.com/zxtceq/p/5691213.html
Copyright © 2011-2022 走看看