Welcome to Sign in | Help
in Search

se poate optimiza in vreun fel .... sql server 2005

Last post 01-07-2009, 3:08 PM by rsocol. 3 replies.
Sort Posts: Previous Next
  •  01-07-2009, 12:50 PM 6484

    se poate optimiza in vreun fel .... sql server 2005

    salut,

    Select b.ExternalCode, a.*, c.CodStare

    from tbl1 a,

    (select * from tbl2 union select * from tbl2_hist) b,

    tbl3 c

    where DataExecutiei = @Data

    and a.CodMesajOut = b.MessageCode

    and c.CodMesajOut = a.CodMesajOut

    and c.CodStare = 32

    and a.CodMesaj = 8

    Order by a.CodMesaj

     

    multumesc.

    alex.

  •  01-07-2009, 1:10 PM 6485 in reply to 6484

    Re: se poate optimiza in vreun fel .... sql server 2005

    Modificând puţin semnificaţia query-ului, ai putea să scrii:

    Select b.ExternalCode, a.*, c.CodStare

    from tbl1 a,

    (select ExternalCode, MessageCode from tbl2 union select ExternalCode, MessageCode from tbl2_hist) b,

    tbl3 c

    where DataExecutiei = @Data

    and a.CodMesajOut = b.MessageCode

    and c.CodMesajOut = a.CodMesajOut

    and c.CodStare = 32

    and a.CodMesaj = 8

    Order by a.CodMesaj

     

    Sau chiar:

    Select b.ExternalCode, a.*, c.CodStare

    from tbl1 a,

    (select ExternalCode, MessageCode from tbl2 union all select ExternalCode, MessageCode from tbl2_hist) b,

    tbl3 c

    where DataExecutiei = @Data

    and a.CodMesajOut = b.MessageCode

    and c.CodMesajOut = a.CodMesajOut

    and c.CodStare = 32

    and a.CodMesaj = 8

    Order by a.CodMesaj

    Apoi poţi să elimini ORDER BY-ul, dacă ai o singură valoare pentru a.CodMesaj.

    Poţi să încerci să mai creezi nişte indecşi (dacă nu există):

    CREATE INDEX ix1 ON tbl1 (CodMesaj, CodMesajOut)
    CREATE INDEX ix2 ON tbl3 (CodStare, CodMesajOut)

    Totuşi, nu mi-e clar din care tabelă vine coloana DataExecutiei.

    Răzvan

  •  01-07-2009, 2:54 PM 6487 in reply to 6485

    Re: se poate optimiza in vreun fel .... sql server 2005

    DataExecutiei vine tdin tbl1

    am facut modificarile dar mai am o intrebare,

    acest union

    (select ExternalCode,MessageCode from tbl2 union all select ExternalCode,MessageCode from tbl2_HIST) b

    il folosesc de f multe ori in interiorul procedurii mele (de unde apartine si codul postat anterior) doar ca se schimba clauza de where (se modifica c.CodStare si a.CodMesaj)....intrebarea este: nu mai bine bag intr-o tabela temporara acest union la inceputul procedurii si apoi citesc din ea?

    multumesc.

    alex.

  •  01-07-2009, 3:08 PM 6489 in reply to 6487

    Re: se poate optimiza in vreun fel .... sql server 2005

    > mai bine bag intr-o tabela temporara acest union la inceputul procedurii si apoi citesc din ea?

    Depinde, în funcţie de cât de multe date sunt returnate de acest UNION. Dacă sunt câteva zeci sau sute de rânduri (sau poate chiar câteva mii), s-ar putea să fie mai eficient, cu condiţia să existe un index pe coloana MessageCode în tabela temporară. Dacă sunt mai mult de câteva mii de rânduri, atunci simpla copiere în tabela temporară ar putea dura destul de mult.

    Răzvan
View as RSS news feed in XML
Powered by Community Server (Commercial Edition), by Telligent Systems