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