如果一个sql 其中 
left join 了 4次 速度很慢 怎么解决呢

解决方案 »

  1.   

    干嘛要JOIN,把你SQL贴出来,看能否优化
      

  2.   

    -- 在联结的相关字段创建索引!
    -- 当有where 条件时,先析取(先where条件排除不需要联结的数据行),再联结!
      

  3.   

    -- 联结字段,where条件引用的字段,尽量用字段原型,避免隐式转换造成全表扫描!
      

  4.   

    -- 不要吝啬你的代码!最好把你的SQL语句贴出来!
      

  5.   

    SELECT distinct  * from  MARKET A 
    LEFT join  
    (select distinct bond_code, big_par,BOND_UNI_CODE,bond_id,Sec_Mar_Par from CONT )B  
    on A.code = B.bond_code 
    left join 
    (select distinct CCX_INTE_METH_PAR,BOND_UNI_CODE from basic_info) C  
    on C.BOND_UNI_CODE = B.BOND_UNI_CODE 
    left join 
    (select distinct cred_level,BOND_SHORT_LEVEL,BOND_LONG_LEVEL,bond_id from bond_cred_rate) D  
    on  B.bond_id = D.bond_id where 1 = 1  and b.big_par is not null  
     SQL是这样的
      

  6.   

    and b.big_par is not null -- 上面这个条件放到子查询里面去!
    -- SQL语句的起码规则:先析取,再联结!
      

  7.   

    为空是因为left join 才产生的 所以不能在子查询中加入 这个
      

  8.   

    -- 你这个语句还是很有问题!-- 优化方法:-- 验证所有子查询的 distinct 是否是多余的,如果是多余的,将distinct关键字去掉:-- 如:
    select distinct bond_code, big_par,BOND_UNI_CODE,bond_id,Sec_Mar_Par from CONT 
    where big_par is not null;select bond_code, big_par,BOND_UNI_CODE,bond_id,Sec_Mar_Par from CONT 
    where big_par is not null;-- 如果上面两个查询返回的记录行是一样的,则将原子查询中的distinct 关键字去掉(即:选择下面的语句作为子查询语句!-- 其他两个子查询同理!
      

  9.   

    SQL语句优化,从看执行计划入手,做个sql_trace或autotrace试试,看看有没有不必要的全表扫描
      

  10.   

    查看执行计划,是HashJoin还是NestedJoin
    HashJoin外部表用大的
    NestedJoin外部表用小的
    等值字段是否有索引
    表的统计信息是否正确 等等...
      

  11.   

    看到那么多distinct,不慢都不正常了
      

  12.   

    仔细分析一下自己的SQL中的B部分,如果不需要这么折腾,在独处来的时候,就给足了条件不过你可能也是五百吧。这种情况不可避免。not is null的的确确是影响性能的一个关键。楼主同学,你好好研究下你的SQl吧,你的SQL、可以继续做优化的说。回一下9楼:left join 的时候,右边没有能够匹配上左面的数据,那么,情况咋样呢?当然匹配出来的是空值了。
      

  13.   

    不太懂,只是感觉有那么多次left join 建议写成两条SQL语句