/ Forside / Teknologi / Udvikling / SQL / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
SQL
#NavnPoint
pmbruun 1704
niller 962
fehaar 730
Interkril.. 701
ellebye 510
pawel 510
rpje 405
pete 350
gibson 320
10  smorch 260
MSSQL: View performance
Fra : Morten Snedker


Dato : 01-11-05 21:02

Hej folkens,

Jeg synes det er underligt, men det vel skyldes at ske manglende
viden:

Jeg har et view, og så har jeg en user-defined function. Denne
funktion vil jeg gerne have til at indgå i mit view, til returnering
af en værdi.

Min funktion bliver kaldt med et produktionsID. Funktionen består af
en SUM af et felt, der indgår i to joinede tabeller.

Afvikler jeg jeg min funktion direkte ved kald med et ProduktionsID,
så får jeg returneret resultatet prompte.

Afvikler jeg mit view UDEN funktionen, returneres posterne prompte
(ca. 1500 poster).

Men indsætter jeg min funktion i mit view, ja så performer det ad h..
til. Vi snakker 30-40 sekunder. Hvorfor?

Funktionen ser således ud:

CREATE FUNCTION [dbo].[fnFejlAntal] (@ProduktionID int)
RETURNS int AS
--Returnerer summen af tblFejlAntal.Antal_Fejl via ProduktionID i
tblFejlliste
BEGIN
RETURN(
   SELECT SUM(dbo.tblFejlantal.Antal_fejl) AS iAntal
   FROM dbo.tblFejlantal INNER JOIN
dbo.tblFejlliste ON dbo.tblFejlantal.FejllisteID
= dbo.tblFejlliste.FejllisteID
WHERE tblFejlliste.ProduktionID=@ProduktionID
)
END


Mit view er en ordinær SELECT på to joinede tabeller (1-mange), med
hhv. 22.000 og 27.000 poster.

Any ideas?


mvh /Snedker
----------------
www.dbconsult.dk

 
 
Peter Lykkegaard (01-11-2005)
Kommentar
Fra : Peter Lykkegaard


Dato : 01-11-05 21:28

"Morten Snedker" wrote

> Jeg synes det er underligt, men det vel skyldes at ske manglende
> viden:
>
> Jeg har et view, og så har jeg en user-defined function. Denne
> funktion vil jeg gerne have til at indgå i mit view, til returnering
> af en værdi.
>
> Afvikler jeg jeg min funktion direkte ved kald med et ProduktionsID,
> så får jeg returneret resultatet prompte.
>
> Afvikler jeg mit view UDEN funktionen, returneres posterne prompte
> (ca. 1500 poster).
>
> Men indsætter jeg min funktion i mit view, ja så performer det ad h..
> til. Vi snakker 30-40 sekunder. Hvorfor?
>
Din funktion bliver jo kaldt 1500 gange ...

- Peter



Morten Snedker (02-11-2005)
Kommentar
Fra : Morten Snedker


Dato : 02-11-05 10:42

On Tue, 1 Nov 2005 21:27:59 +0100, "Peter Lykkegaard"
<plykkegaard@gmail.com> wrote:


>> Afvikler jeg jeg min funktion direkte ved kald med et ProduktionsID,
>> så får jeg returneret resultatet prompte.

>Din funktion bliver jo kaldt 1500 gange ...

Hallo! Står der ikke "prompte"? Hvad er 1500*prompte?

Nå, den funktion sucked a bit.

Tak til Jer begge for input - Jan puffede mig i den rigtige retning.

Jeg nåede frem til et uhensigtsmæssigt design, samt den erkendelse, at
det kunden gerne vil, ganske enkelt ikke lader sig gøre med de
eksisterende data.

mvh /Snedker


---

Jan Bachman (01-11-2005)
Kommentar
Fra : Jan Bachman


Dato : 01-11-05 22:44

On Tue, 01 Nov 2005 21:02:15 +0100, Morten Snedker
<morten@dbconsult.dk> wrote:

>Any ideas?

Kan du ikke lave en summering af fejlene og så joine det nestet i dit
view? Jeg går ud fra at dit view er kompleks, så du ikke kan joine og
summere fejlene direkte.

Idegrundlag:

select tabel.produktionid, nest.iantal
from tabel
inner join

( select fejlliste.produktionid, sum(fejlantal.antal_fejl) as iantal
from fejlantal
inner join fejlliste on fejlantal.fejllisteid = fejlliste.fejllisteid
group by fejlliste.produktionid ) as nest

on tabel.produktionid = nest.produktionid

/Jan

Søg
Reklame
Statistik
Spørgsmål : 177580
Tips : 31968
Nyheder : 719565
Indlæg : 6409083
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste