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

Wywołanie funkcji w klauzuli where

Jak zwykle w przypadku SQL, zapytanie jest w dużej mierze nieistotne bez znajomości rzeczywistego schematu.

Czy masz indeks na Members.Phone? Jeśli nie, to nie ma znaczenia, jak napiszesz zapytanie, wszystkie przeskanują całą tabelę i wykonają to samo (tzn. będą działać źle). Jeśli masz indeks to sposób, w jaki piszesz zapytanie, robi różnicę:

SELECT * FROM Members WHERE Phone= @Phone;
SELECT * FROM Members WHERE Phone= dbo.FormatPhone(@Phone);
SELECT * FROM Members WHERE  dbo.FormatPhone(Phone)[email protected];

Pierwsze zapytanie jest gwarantowane optymalne, będzie szukało telefonu po indeksie.
Drugie zapytanie zależy od charakterystyki dbo.FormatPhone. Może, ale nie musi używać optymalnego wyszukiwania.
Ostatnie zapytanie jest z pewnością złe. Zeskanuje stół.

Ponadto usunąłem wskazówkę NOLOCK, wydaje się, że jest to temat dnia... Zobacz składnia dla nolock w sql . NOLOCK jest zawsze Błędna odpowiedź. Użyj izolacji migawki.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Czy istnieje sposób na uzyskanie różnych wyników dla tego samego zapytania SQL, jeśli dane pozostają takie same?

  2. Wyszukiwanie następnego wiersza w zapytaniu SQL i usuwanie go tylko wtedy, gdy poprzedni wiersz pasuje

  3. Unikanie pojedynczego cudzysłowu w SQL Server

  4. Połącz dwie kolumny w instrukcji select serwer sql 2005

  5. Używanie zdarzeń rozszerzonych do rejestrowania przestarzałych funkcji używanych w wystąpieniu programu SQL Server (przykład T-SQL)