Welcome to Sign in | Help
in Search

Problema cu ultimele inregistrari

Last post 04-16-2008, 9:12 PM by csm75. 2 replies.
Sort Posts: Previous Next
  •  04-16-2008, 12:42 PM 4653

    Problema cu ultimele inregistrari

    Salut
    Am o tabela pk_key(int), cod(char),sold(numeric), data(smalldatetime) din care sa extrag ultimele inregistrari la o anumita data la care soldul sa fie diferit de 0.
    Selectul pe care il am acum este
    SELECT cod, sold, SUBSTRING(cod,3,4) as grupa FROM tabel t1
    WHERE sold <> 0 and SUBSTRING(cod,1,2) = @comp and pk_key =
    (SELECT MAX(pk_key) as pk_key FROM tabel t2 WHERE t1.cod = t2.cod AND t2.data <= data)
    ORDER by cod
    Problema este ca la un numar mare de inregistrari returnate selectul dureaza cam 16 secunde.
    Pot face ceva sa mearga mai repede ?
    Am indecsi pe cod, data, cod+data, pk_key(clustered).
    Multumesc.

    Sorin Sandu
  •  04-16-2008, 8:03 PM 4666 in reply to 4653

    Re: Problema cu ultimele inregistrari

    Ati incercat ceva de genul  " select TOP(1)  ... where ... ORDER BY pk_key DESC"?

    Asa ceva va returna o inregistrare (de fapt ultima pt ca ordinea este descrescatoare) care respecta conditiile impuse.


    Gheorghe Ciubuc,SQL Server Influencer, MCP(SQL 2000), MCTS (SQL Server 2005) , OCA(Oracle 9i), Sybase(Brainbench)
  •  04-16-2008, 9:12 PM 4668 in reply to 4653

    Re: Problema cu ultimele inregistrari

    Incearca sa pui nolock la tabele.

    Incearca sa scapi de conditia where .... pk_key =(SELECT MAX(pk_key) as pk_key FROM tabel t2 WHERE t1.cod = t2.cod AND t2.data <= data) printr-un join intre t1 si t2

    ceva de genul:

    SELECT t1.cod, t1.sold, SUBSTRING(t1.cod,3,4) as grupa FROM tabel t1 (nolock)

    join (SELECT MAX(pk_key) as pk_key FROM tabel t2(nolock) WHERE t1.cod = t2.cod AND t2.data <= data) xt on t1.pk_key = xt.pk_key

    Nu am testat join-ul asta, dar stiu sigur ca ajuta la performnta.

     

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