sql >> Databáze >  >> RDS >> Sqlserver

Volání funkce v klauzuli where

Jak je obvyklé u SQL, dotaz je do značné míry irelevantní, aniž byste věděli, proti kterému je skutečné schéma použito.

Máte index na Members.Phone? Pokud ne, pak nezáleží na tom, jak napíšete dotaz, všichni prohledají celou tabulku a provedou to samé (tj. povedou špatně). Pokud máte index pak způsob, jakým napíšete dotaz, je zásadní:

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

První dotaz je zaručeně optimální, vyhledá telefon na indexu.
Druhý dotaz závisí na vlastnostech dbo.FormatPhone. Může nebo nemusí používat optimální hledání.
Poslední dotaz je zaručeně špatný. Prohledá tabulku.

Také jsem odstranil nápovědu NOLOCK, zdá se, že je to téma dne... Viz syntaxe pro nolock v sql . NOLOCK je vždy špatná odpověď. Použijte izolaci snímku.



  1. Jak analyzovat řetězec a vytvořit z něj několik sloupců?

  2. Jak zadat volitelnou podmínku OUTER JOIN v Oracle 8i

  3. Jak migrovat z Oracle na MySQL / Percona Server

  4. Určete, zda příkaz sql začíná slovem SELECT