Avatar billede the_raze Nybegynder
11. november 2008 - 09:37 Der er 2 kommentarer og
1 løsning

Optimering af stored procedures

Hejsa,

Jeg har en repeater i ASP.NET som henter nogle product categories ud. For hver product cat. er der en nested repeater som henter products for den pågældende category ud.

For hver af disse products, bliver der kørt 2 stored procedures.
Den ene henter den sidste version og den anden henter den sidst sendte ud.

Hvorfor ovenstående gøres er som sådan ligemeget. Problemet er..
I et af tilfældende har jeg 39 products under 1 product category.

Eksekveringen af de 2 stored procedures, tager lige godt og vel 2 sekunder.

Er der en måde at optimere dette?

Stored procedure 1:
-----------------------------------------
SET ANSI_NULLS OFF
GO
SET QUOTED_IDENTIFIER OFF
GO
ALTER PROCEDURE [dbo].[stp_GetLatestVersionOfProductAndRisk]
@PrBasisGuid uniqueidentifier,
@Language varchar
    as
--Select all newest versions of ProductAnd Risk Descriptions for a given language
    select top 1 pr.new_productandriskid as prguid, pr.new_versionnnumber as versionnr
    from new_productandrisk as pr
        JOIN new_productandriskbasis as prbase
        ON pr.new_prbaseguidid = prbase.new_productandriskbasisid
    where prbase.new_productandriskbasisid = @PrBasisGuid
    AND pr.new_languagecode = @Language
    ORDER BY pr.new_versionnnumber DESC



Stored procedure 2:
-----------------------------------------
SET ANSI_NULLS OFF
GO
SET QUOTED_IDENTIFIER OFF
GO
ALTER PROCEDURE [dbo].[stp_GetLatestSentOfProductAndRisk]
@PrGuid uniqueidentifier,
@Language varchar,
@CustomerGuid uniqueidentifier
    as
--Select all latest sent for a given Product and  Descriptions for a given language
    select top 1 pr.new_versionnnumber as versionnr
    from new_productandrisk as pr
        INNER JOIN new_productandriskregistration as prReg
        ON  prReg.new_productandriskid = pr.new_productandriskid
    where prReg.new_customerguidid = @CustomerGuid
    and pr.new_languagecode = @Language
    and pr.new_prbaseguidid = @PrGuid
    order by pr.new_versionnnumber DESC

Så vidt jeg kan se, så har jeg fået oprettet indexes på det hele..
Avatar billede aaberg Nybegynder
11. november 2008 - 09:51 #1
Du skal sætte nogle indexer på dine tabeller.

Jeg vil anbefale dig starte SQL Server Profiler. Denne starter du fra SQL Server Management Studio, ved at trykke "Tools --> SQL Server Profiler". Denne sætter du til at overvåge alt kommunikation med SQL Serveren, og så surfer du lidt rundt på din side. Når Profileren har fået lidt input, trykker du "Tools --> Database Engine Tuning Advisor..." i SQL Server Profileren. Denne kan give dig tips for at sætte indexer på dine tabeller.
Avatar billede arne_v Ekspert
12. november 2008 - 04:22 #2
Man går næppe helt galt med index på:

new_productandriskbasis.new_productandriskbasisid
new_productandrisk.new_prbaseguidid
new_productandrisk.new_languagecode

og:

new_productandriskregistration.new_productandriskid
new_productandrisk.new_productandriskid
new_productandrisk.new_languagecode
new_productandrisk.new_prbaseguidid
Avatar billede the_raze Nybegynder
25. november 2008 - 10:02 #3
Det gav ikke noget mærkbart resultat. Så jeg endte med at hente products ud i memory og så hendte de respektive ting derfra. Fik den til at køre hurtigt!
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester