Welcome to Sign in | Help

optimizare SELECT (sql server 2000)

  •  08-07-2007, 4:04 PM

    optimizare SELECT (sql server 2000)

    salut, vede cineva o varianta mai simpla la selectul asta (poate asta il si optimizeaza):


    select x.*,y.code CodAgent from
    (
    select cst.*, x.cstid IDSUP from vw_crmimportclienti cst
    left join
      (select min(acc_id) cstid, min(acc_new_codfiscal) cstafm from vw_crmimportclienti
    where acc_new_codfiscal in (select acc_new_codfiscal from vw_crmimportclienti
         where (acc_new_codfiscal like '%1%' or acc_new_codfiscal like '%2%' or acc_new_codfiscal like '%3%'
     or acc_new_codfiscal like '%4%' or acc_new_codfiscal like '%5%' or acc_new_codfiscal like '%6%'
     or acc_new_codfiscal like '%7%' or acc_new_codfiscal like '%8%' or acc_new_codfiscal like '%9%' or acc_new_codfiscal like '%0%')
         group by acc_new_codfiscal
         having count(acc_new_codfiscal) > 1)
    group by acc_new_codfiscal) x
      on cst.acc_new_codfiscal = x.cstafm and cst.acc_id > x.cstid
    where x.cstid is not null
     and cst.comid = 3

    union all

    select cst.*, null IDSUP from vw_crmimportclienti cst
    left join
      (select min(acc_id) cstid, min(acc_new_codfiscal) cstafm from vw_crmimportclienti
    where acc_new_codfiscal in (select acc_new_codfiscal from vw_crmimportclienti
         where (acc_new_codfiscal like '%1%' or acc_new_codfiscal like '%2%' or acc_new_codfiscal like '%3%'
     or acc_new_codfiscal like '%4%' or acc_new_codfiscal like '%5%' or acc_new_codfiscal like '%6%'
     or acc_new_codfiscal like '%7%' or acc_new_codfiscal like '%8%' or acc_new_codfiscal like '%9%' or acc_new_codfiscal like '%0%')
         group by acc_new_codfiscal
         having count(acc_new_codfiscal) > 1)
    group by acc_new_codfiscal) x
      on cst.acc_new_codfiscal = x.cstafm and cst.acc_id = x.cstid
    where x.cstid is not null
     and cst.comid = 3

    union all

    select *, null IDSUP from vw_crmimportclienti cst
    where acc_id not in
    (select acc_id from vw_crmimportclienti cst
    left join
      (select min(acc_id) cstid, min(acc_new_codfiscal) cstafm from vw_crmimportclienti
    where acc_new_codfiscal in (select acc_new_codfiscal from vw_crmimportclienti
         where ( acc_new_codfiscal like '%1%' or acc_new_codfiscal like '%2%' or acc_new_codfiscal like '%3%'
     or acc_new_codfiscal like '%4%' or acc_new_codfiscal like '%5%' or acc_new_codfiscal like '%6%'
     or acc_new_codfiscal like '%7%' or acc_new_codfiscal like '%8%' or acc_new_codfiscal like '%9%' or acc_new_codfiscal like '%0%')
         group by acc_new_codfiscal
         having count(acc_new_codfiscal) > 1)
    group by acc_new_codfiscal) x
      on cst.acc_new_codfiscal = x.cstafm and cst.acc_id > x.cstid
    where x.cstid is not null
     and cst.comid = 3

    union all

    select acc_id from vw_crmimportclienti cst
    left join
      (select min(acc_id) cstid, min(acc_new_codfiscal) cstafm from vw_crmimportclienti
    where acc_new_codfiscal in (select acc_new_codfiscal from vw_crmimportclienti
         where ( acc_new_codfiscal like '%1%' or acc_new_codfiscal like '%2%' or acc_new_codfiscal like '%3%'
     or acc_new_codfiscal like '%4%' or acc_new_codfiscal like '%5%' or acc_new_codfiscal like '%6%'
     or acc_new_codfiscal like '%7%' or acc_new_codfiscal like '%8%' or acc_new_codfiscal like '%9%' or acc_new_codfiscal like '%0%')
         group by acc_new_codfiscal
         having count(acc_new_codfiscal) > 1)
    group by acc_new_codfiscal) x
      on cst.acc_new_codfiscal = x.cstafm and cst.acc_id = x.cstid
    where x.cstid is not null
     and cst.comid = 3)

    ) x

    inner join

    (
    select sal.Code code,ftr.cusid cusid
    from   (
      SELECT     ftr.cusid,min(ftr.id) ftrid
      FROM         dbo.FINTRADE ftr INNER JOIN
                   dbo.ITEMTRANS itt ON ftr.ID = itt.FTRID
      WHERE     (ftr.SOURCE = 5) AND (itt.BILLEDOUTPUT = 1)
                   group by cusid
     ) y
                    join fintrade ftr on ftr.id=y.ftrid
      INNER JOIN Salesman sal
      on ftr.COLIDSALESMAN = sal.id

     ) y
    on x.acc_id=y.cusid

    intoarce ~20 de mii de inregistrari si dureaza ~20 sec

    multumesc

    alex.

     

     

View Complete Thread
Powered by Community Server (Commercial Edition), by Telligent Systems