Welcome to Sign in | Help

Slow query

  •  11-14-2008, 10:34 AM

    Slow query

    Salut
    Am urmatoarea SP
    CREATE PROCEDURE [dbo].[inventar]
     @comp int, @gestiune varchar(30), @data DATETIME
    WITH RECOMPILE
    AS
    WITH Preturi (cod, pret) AS
    (
        SELECT cod, pret 
        FROM stocuri AS c1
        WHERE pk_key =
        (select max(pk_key) as pk_key from cont as c2
            where c2.cod = c1.cod AND c2.data <= @data) AND c1.compart = @comp
    )
    SELECT c1.cod AS Codul,
        c1.cont AS Contul, c1.um AS UM, c1.sold AS Sold,
        SUBSTRING(c1.cod,3,4) AS grupa, Preturi.pret, ROUND(Preturi.pret * c1.sold, 2) AS valoare
            FROM depozit c1
        INNER JOIN Preturi ON c1.cod = Preturi.cod
            WHERE (c1.sold <> 0) AND (c1.compart = @comp)
        and (c1.gestiune = @gestiune) AND (c1.pk_key =
            (SELECT MAX(pk_key) AS pk_key
            FROM depozit c2
            WHERE (c2.cod = c1.cod) AND c2.data <= @data AND c2.gestiune = c1.gestiune))
            ORDER BY c1.cod, c1.cont

    Indexes
    Pe stocuri
    pk_key Clustered
    compart
    data (incl pk_key, cod)

    Pe depozit
    pk_key Clustered
    cod
    cod,gestiune,data
    depozit,cod,pk_key (incl cont, um, sold) -> recomandat de SQL Server

    Pe langa acesti indecsi mai exista si altii dar nu cred ca au relevanta in acest caz (sau are!?).
    Problema e ca ruleaza cam greu ptr. unele compartimente si gestiuni (cele cu foarte multe repere cam 1:30 min)  si da timeout la incarcarea unui DataSet (nu as vrea sa modific Timeout la conexiune ptr ca nu rezolva problema).
    Credeti ca se mai poate umbla la aceasta procedura ?
    Va multumesc.


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