Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Funzione con valori di tabella che elimina le prestazioni della mia query

La restituzione di una variabile di tabella la renderà una funzione con valori di tabella a più istruzioni e può essere dannoso per le prestazioni a causa del fatto che viene trattato come una tabella, tranne per il fatto che non sono disponibili statistiche su cui SQL Server può basare un buon piano di esecuzione, quindi stimerà la funzione restituendo un numero molto ridotto di righe. Se restituisce un numero di righe maggiore, il piano generato potrebbe essere molto meno che ottimale.

Considerando che, restituendo solo un SELECT lo rende una funzione con valori di tabella inline - pensalo più come una vista. In questo caso, le tabelle sottostanti effettive vengono portate nella query principale e può essere generato un piano di esecuzione migliore basato su statistiche appropriate. Noterai che in questo caso, il piano di esecuzione NON conterrà affatto una menzione della funzione poiché in pratica è semplicemente unita alla funzione nella query principale.

C'è un ottimo riferimento su MSDN di CSS SQL Server Engineers tra cui (citazione):