我知道oracle的CBO优化器有三种表的连接方式 ,sort merge join ,  nested loops , hash join ,但我不知道oracle主要是跟据什么来觉定表的连接方式比如说有的sql语句表连接是用的sort merge join,但是在网上不是说sort merge join比较慢吗,那为什么还要用sort merge join的方式来连接? 我还看到说用sort merge join连接主要是因为表的索引不够,请问是这样的吗?  小弟先谢过了

解决方案 »

  1.   

    每种计划方式都会根据oracle内部指定的规则计算cost的成本,最后选择cost成本低的。
    但是cost的计算并不一定全是正确的,存在出错的可能。所以有时需要我们去干预。
      

  2.   

    同LS的。这个是根据表、索引的统计信息来确定连接方式的。具体的确定过程,以及怎样确定最后选哪种连接方式,最后我也想知道。要根据具体情况,sort merge join也不一定就最差吧。
    “在缺乏数据的选择性或者可用的索引时,或者两个源表都过于庞大(所选的数据超过表记录数的5%)时,排序合并连接将比嵌套循环连更加高效。”
      

  3.   

    一般来用NS LOOP的比较多点,HASH对小表会有优势
      

  4.   

    在找关于sort merge join , nested loops , hash join 的知识,
    先感谢下