Avatar billede netro Nybegynder
09. august 2005 - 11:39 Der er 10 kommentarer og
1 løsning

Brug af variabler i SP

Jeg har en række lidt heftige SQL-statements, hvor op til 12 tabeller joines. Dertil har jeg tænkt at anvende stored procedures udelukkende af hensyn til performance. Jeg har i den forbindelse lige et par spørgsmål.

Hvis jeg bruger variabler i disse statements, som jeg kalder SP med, vil det så ikke nedsætte hastigheden, fordi SP skal rekompileres hver gang - i modsætning til, hvis det er et statisk SQL-statement?

De pågældende statements, vil have en stor del tilfælles. Forskelle vil typisk bestå i, hvor mange tabeller/kolonner der medtages. Hvordan laves det smartest, så jeg undgår at gentage mig selv hele tiden fra SP til SP? Er løsningen at lave een SP, der vha. inputparametrer sammensætter det korrekte statement - og i så fald hvordan? Er lidt i tvivl...
Avatar billede arne_v Ekspert
09. august 2005 - 11:56 #1
hvis du konstruerer en query dynamisk i din SP og exec'er den så skal du nok
ikke forvente nogen performance forbedring

hvis det er samme query bare mned forskellige værdier, så mener jeg at den
kan optimere
Avatar billede netro Nybegynder
09. august 2005 - 19:15 #2
Altså vil disse tage cirka den samme tid, hvis @f2=23?

Select f1 From t Where f2=23;

Select f1 From t Where f2=@v;
Avatar billede netro Nybegynder
09. august 2005 - 19:31 #3
Hvis @v=23 skulle der stå...
Avatar billede arne_v Ekspert
09. august 2005 - 21:50 #4
jeg er sikker på at de begge er hurtigere end en normal statement

jeg er sikker på at de begge er hurtigere end en string exec sp

jeg tror at de er lige hurtigere

men det sidste må du hellere få verificeret af større guruer end mig

du kan også selv undersøge det ved at studere query planen for de to
Avatar billede netro Nybegynder
09. august 2005 - 22:00 #5
Ok. Jeg har også lavet lidt test på hastigheden (i mit tilfælde), og de viser, at jeg i forhold til et statement i applikationskoden vinder følgende:

View: 6 gange hurtigere
SP: 10 gange hurtigere

Hvis indeksene ikke er i orden, er det faktisk cirka samme tider for de tre.

Har du i øvrigt et forslag til backup af databasen (både tabeller, views, SP's, indekser osv.)? Jeg har ikke rettigheder til at bruge backup-funktionen i Enterprise Manager. Jeg drømte lidt om at lave backup'en som en *.sql-fil.
Avatar billede arne_v Ekspert
09. august 2005 - 22:11 #6
Du kan godt lave BACKUP i OSQL hvis du har privs til det !?
Avatar billede netro Nybegynder
11. august 2005 - 09:12 #7
Jeg gjorde noget helt tredje - nemlig importering af den fra en anden SQL Server.

Arne -> Hvordan vil du lave en SP, der ud fra en parameter gør følgende:

a) Hvis parameteren har en VÆRDI, selekteres det, der MATCHER denne.
b) Hvis parameteren er TOM (null), selekteres ALT.

CREATE PROCEDURE test
(
  @PID int = null,
)
AS
Select F1 From T Where F2 = @PID (..?..)
Avatar billede netro Nybegynder
11. august 2005 - 09:13 #8
Smid bare et svar også.
Avatar billede arne_v Ekspert
11. august 2005 - 09:40 #9
Jeg mener at man tit bruger det her trick:

SELECT f1 FROM t WHERE f2 = ISNULL(@pid,f2)
Avatar billede arne_v Ekspert
11. august 2005 - 09:40 #10
og svar
Avatar billede netro Nybegynder
11. august 2005 - 09:46 #11
Genial lille fidus. Mange tak.
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