Welcome to Sign in | Help

Optimizare SQL

  •  04-02-2009, 3:56 PM

    Optimizare SQL

    Am urmatorul SQL:


    select  left(fc.cont,1) as clasa,left(fc.cont,2) as subcls,
        isnull((
       
        SELECT sum(debit-credit) as sold
        FROM A_lstFisaCont
        where cont=fc.cont and
        ((datainr is not null and (fc.datainr>datainr or (fc.datainr=datainr and fc.nds>=nds))) or datainr is null) and
        coduser=1

        ),0) as sold, fc.debit-fc.credit-fc.sid+fc.sic as sSold,fc.debit-fc.sid as sdebit,fc.credit-fc.sic as scredit

    from A_lstFisaCont FC
    where fc.coduser=1
    order by fc.cont,fc.datainr,fc.NDS



    Daca tabela A_lstFisaContcontine 50.000 de inregistrari, SQL-ul returneaza inregistrarile dupa aproximativ 4 minute (sau mai mult, in functie de cat de incarcat mi-e procesorul de la celelalte aplicatii deschise), ceea ce e foarte mult. Am calculator performant, nu asta este important; important este ca trebuie sa fac ca rezultatul generat sa iasa mai repede, fie prin rescrierea SQL-ului, fie prin regandirea algoritmului de calcul al campului Sold (aici e problema). Am incercat sa pun indecsi pe tabela, am folosit inclusiv Index Tuning Wizard, dar fara succes.

    M-am gandit si la ideea de a crea coloana Sold in tabela A_lstFisaCont, sa ordonez inregistrarile asa cum am eu nevoie (Cont, DataInr, NDS) si sa parcurg aceasta tabela cu un cursor facand update pe coloana Sold inregistrare curenta = Sold din inregistrarea de deasupra + debit - credit. Din cate am inteles, insa, cursorul este foarte lent si nu ma ajuta.

    Ce solutii posibile am la problema mea?


    Multumesc anticipat,
    Ovidiu
    Filed under: ,
View Complete Thread
Powered by Community Server (Commercial Edition), by Telligent Systems