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

Funktion call in where klausul

Som sædvanligt med SQL er forespørgslen stort set irrelevant uden at vide, hvilket skema der bruges imod.

Har du et indeks på Members.Phone? Hvis nej, så gør det ingen forskel, hvordan du skriver forespørgslen, de scanner alle hele tabellen og udfører det samme (dvs. yder dårligt). Hvis du har et indeks så gør den måde, du skriver forespørgslen på, hele forskellen:

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

Første forespørgsel er garanteret optimal, vil søge telefonen på indekset.
Anden forespørgsel afhænger af egenskaberne af dbo.FormatPhone. Den bruger muligvis en optimal søgning eller ikke.
Den sidste forespørgsel er garanteret dårlig. Vil scanne bordet.

Jeg fjernede også NOLOCK-tip, det ser ud til at være dagens tema... Se syntaks for nolock i sql . NOLOCK er altid det forkerte svar. Brug snapshot-isolering.



  1. Tving MySQL til at returnere dubletter fra WHERE IN-klausulen uden at bruge JOIN/UNION?

  2. Oracle SQL Query Filter i JOIN ON vs WHERE

  3. MariaDB LTRIM() vs LTRIM_ORACLE():Hvad er forskellen?

  4. Importer stor .sql-fil til MySQL