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

Czy użycie funkcji w celu uproszczenia zapytania SQL w znacznym stopniu wpłynie na wydajność?

Zwykle wybieranie wynik funkcji skalarnej nie zaszkodzi, ale filtrowanie przez to może z łatwością kosztować setki sekund (choć niekoniecznie).

Jeśli potrzebujesz filtrować według wyniku funkcji skalarnej (WHERE col = dbo.scalar_function() ), często pomaga utworzenie wbudowanej funkcji z wartościami przechowywanymi w tabeli. Zwróci swoją wartość jako jedyny wiersz tabeli wynikowej. Następnie wykonałbyś inner join z wynikiem funkcji, skutecznie filtrując według zwracanej wartości. Działa to, ponieważ SQL Server jest zawsze w stanie rozwinąć wbudowane funkcje z wartościami z tabeli i wstawić je do zapytania wywołującego.

Zauważ, że ta sztuczka nie zadziała, jeśli funkcja jest wieloetapowa. Nie można ich rozwinąć.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Dynamiczny błąd SQL podczas konwersji nvarchar na int

  2. SQL Dodaj klucz obcy do istniejącej kolumny

  3. LEFT JOIN vs. LEFT JOIN w SQL Server

  4. Scal zduplikowane rekordy czasowe w bazie danych

  5. Odmówiono uprawnienia SELECT do obiektu „sysjobs”, bazy danych „msdb”, schematu „dbo”