Consiglio (chiarimento) sull'uso delle funzioni

di il
2 risposte

Consiglio (chiarimento) sull'uso delle funzioni

Ho creato una stored procedure che mi restituisce una tabella.
Inizialmente l'ho popolata con una select del tipo
INSERT INTO @Riepilogo 
SELECT     
ElencoAvanzamenti.IdSmarcatura, 
ElencoAvanzamenti.DataReg,
(SELECT  MIN(DataCPF)
 FROM  NVPMovCPF
 WHERE (IdOPI = ElencoAvanzamenti.IdDocLink) AND (DataCPF > ElencoAvanzamenti.DataReg))
FROM ...
Poi ho pensato di scrivere la seguente funzione
CREATE FUNCTION NFPNextCPF (@IdOpi int, @dataSmarc datetime)
RETURNS datetime
AS
BEGIN
DECLARE @NextCPF datetime

	SET @NextCPF = (
		SELECT MIN(DataCPF)
        FROM MovCPF
        WHERE IdOPI = @IdOpi AND DataCPF > @dataSmarc)
		
	RETURN @NextCPF
END
e quindi nella stored ho popolato la tabella con una select del tipo
INSERT INTO @Riepilogo 
SELECT     
ElencoAvanzamenti.IdSmarcatura, 
ElencoAvanzamenti.DataReg,
dbo.NFPNextCPF (ElencoAvanzamenti.IdDocLink, ElencoAvanzamenti.DataReg)
FROM ...
Questo perchè ho letto che l'uso delle funzioni velocizza l'esecuzione di sql. Mi aspettavo quindi un miglioramento delle prestazioni.
Invece, per un set di 29898 record, siamo passati da 5 secondi a 5 minuti!!!!!

Cosa mi sfugge? Qual è allora il reale vantaggio nell'uso delle funzioni?

Grazie

2 Risposte

  • Re: Consiglio (chiarimento) sull'uso delle funzioni

    Ciao ma quando mai

    Con il secondo approccio gli stai facendo fare a sql server un'operazione in più che è quella del passare dalla funzione...

    La prima query è sicuramente meno dispendiosa.

    patapatty ha scritto:


    INSERT INTO @Riepilogo
    SELECT
    ElencoAvanzamenti.IdSmarcatura,
    ElencoAvanzamenti.DataReg,
    (SELECT MIN(DataCPF)
    FROM NVPMovCPF
    WHERE (IdOPI = ElencoAvanzamenti.IdDocLink) AND (DataCPF > ElencoAvanzamenti.DataReg))
    FROM ...
    La query che hai scritto è incompleta quindi non ho modo di capire dopo il from cosa ci sta.
    Se alla fine generi più righe, attenzione che stai facendo eseguire la query annidata tante volte quante righe di risultato generi.
  • Re: Consiglio (chiarimento) sull'uso delle funzioni

    Ciao ma quando mai
    Con il secondo approccio gli stai facendo fare a sql server un'operazione in più che è quella del passare dalla funzione...
    ...Quindi qual è il vantaggio delle funzioni in sql? Leggendo qua e là in internet avevo capito che l'uso di funzioni è più performante.
    Se alla fine generi più righe, attenzione che stai facendo eseguire la query annidata tante volte quante righe di risultato generi.
    E' proprio quello che voglio, ossia calcolare per ogni record (IdDocLink, DataREg) la data minore successiva a ElencoAvanzamenti.DataReg

    Grazie.
Devi accedere o registrarti per scrivere nel forum
2 risposte