sql >> Databasteknik >  >> RDS >> Sqlserver

Funktionsanrop i where-klausul

Som vanligt med SQL är frågan i stort sett irrelevant utan att veta det faktiska schemat som används mot.

Har du ett index på Members.Phone? Om nej, så spelar det ingen roll hur du skriver frågan, de kommer alla att skanna hela tabellen och utföra samma sak (dvs. prestera dåligt). Om du har ett index då gör sättet du skriver frågan stor skillnad på:

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

Första frågan är garanterat optimal, kommer att söka telefonen på index.
Andra frågan beror på egenskaperna hos dbo.FormatPhone. Det kan eller kanske inte använder en optimal sökning.
Den sista frågan är garanterat dålig. Ska skanna bordet.

Jag tog också bort NOLOCK-tipset, det verkar vara dagens tema... Se syntax för nolock i sql . NOLOCK är alltid fel svar. Använd ögonblicksbildsisolering.



  1. Hur skapar man inkrementerande kolumner?

  2. Spridning av Oracle-transaktioner mellan C++ och Java

  3. SQL fylla i totalt antal arbetsdagar per månad minus helgdagar för innevarande räkenskapsår

  4. ORA-28040:Inget matchande autentiseringsprotokoll:Oracle 12c Upgrade