Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Tabelowa funkcja niszcząca wydajność moich zapytań

Zwrócenie zmiennej tabeli sprawi, że będzie ona funkcją o wartości tabeli zawierającej wiele instrukcji i może mieć negatywny wpływ na wydajność ze względu na fakt, że jest traktowany jak tabela, z wyjątkiem tego, że SQL Server nie ma dostępnych statystyk, na których można by oprzeć dobry plan wykonania — więc oszacuje funkcję jako zwracającą bardzo małą liczbę wierszy. Jeśli zwróci większą liczbę wierszy, wygenerowany plan może być znacznie mniej niż optymalny.

Natomiast zwrócenie tylko SELECT sprawia, że ​​jest to funkcja o wartości w tabeli śródliniowej - myśl o tym bardziej jako o widoku. W takim przypadku rzeczywiste tabele bazowe są wprowadzane do głównego zapytania i na podstawie odpowiednich statystyk można wygenerować lepszy plan wykonania. Zauważysz, że w tym przypadku plan wykonania w ogóle NIE będzie zawierał wzmianki o funkcji, ponieważ jest to po prostu połączenie funkcji z głównym zapytaniem.

Jest na ten temat świetne odniesienie na MSDN przez inżynierów CSS SQL Server, w tym (cytat):



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak łączyć ciągi i wartości NULL w SQL Server

  2. SQL Server:Filtruj dane wyjściowe sp_who2

  3. Wartość pola Concat do ciągu w SQL Server

  4. Musisz wyświetlić listę wszystkich wyzwalaczy w bazie danych SQL Server wraz z nazwą tabeli i schematem tabeli

  5. Czas zbierania alarmów w chmurze Spotlight