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

Differenza tra una funzione inline e una vista

Dopo aver letto molte delle risposte qui, vorrei notare che c'è una grande differenza tra una funzione inline con valori di tabella e qualsiasi altro tipo di funzione (TVF scalare o multilinea).

Un TVF in linea è semplicemente una vista parametrizzata. Può essere ampliato e ottimizzato proprio come una vista. Non è necessario materializzare nulla prima di "restituire risultati" o qualcosa del genere (sebbene, sfortunatamente, la sintassi abbia un RETURN .

Un grande vantaggio che ho riscontrato di un TVF in linea su una vista è che forza la parametrizzazione richiesta mentre con una vista, devi presumere che il chiamante si unirà o limiterà in modo appropriato l'utilizzo della vista.

Ad esempio, abbiamo molte tabelle dei fatti di grandi dimensioni in DW con un tipico modello a stella Kimball. Ho una visione su un modello centrato sulla tabella dei fatti, che chiamato senza alcuna restrizione, restituirà centinaia di milioni di righe. Utilizzando un TVF inline con parametrizzazione appropriata, gli utenti non sono in grado di richiedere accidentalmente tutte le righe. Le prestazioni sono in gran parte indistinguibili tra i due.