一个多表查询,oralce根据什么规则选择连接方式的,
也就是说写多表查询里怎么预判是选择哪种连接方式,嵌套循环连接,hash连接,还是排序合并连接,是可以人为控制,
还是根据表的数据量,索引等条件由优化器自动选择?

解决方案 »

  1.   

    select 
    /*+use hash(fact_sale,dim_city) */
    * from fact_sale,dim_city where fact_sale.citycode=dim_city.city_code and dim_city.city_code=''
      

  2.   

    SELECT STATEMENT, GOAL = ALL_ROWS Cost=0 Cardinality=1 Bytes=261
     FILTER
      MERGE JOIN Cost=12357 Cardinality=20000100 Bytes=5220026100
       PARTITION RANGE ALL Cost=12044 Cardinality=2000010 Bytes=314001570
        TABLE ACCESS FULL Object owner=SYS Object name=FACT_SALE Cost=12044 Cardinality=2000010 Bytes=314001570
       SORT JOIN Cost=3 Cardinality=10 Bytes=1040
        TABLE ACCESS FULL Object owner=SYS Object name=DIM_CITY Cost=2 Cardinality=10 Bytes=1040
      

  3.   

    为什么不是使用hash join呢
      

  4.   

    一个多表查询,oralce根据什么规则选择连接方式的,
    具体选择什么连接方式具体情况而定的,(具体的连接方式左连接、右连接、内连接)具体要因情况而定的。
      

  5.   

    建议参考一本书《oracle品悟性能优化》,分析很透彻
      

  6.   

    cbo,rbo这两个问题搞清楚了没?
      

  7.   


    select  
    /*+USE_HASH(fact_sale,dim_city) */
    * from fact_sale,dim_city where fact_sale.citycode=dim_city.city_code and dim_city.city_code=''