Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Chamada de função na cláusula where


Como de costume com o SQL, a consulta é amplamente irrelevante sem saber o esquema real usado.

Você tem um índice em Members.Phone? Se não, então não faz diferença como você escreve a consulta, todos eles vão varrer toda a tabela e executar o mesmo (ou seja, executar mal). Se você tem um índice então a maneira como você escreve a consulta faz toda a diferença:
SELECT * FROM Members WHERE Phone= @Phone;
SELECT * FROM Members WHERE Phone= dbo.FormatPhone(@Phone);
SELECT * FROM Members WHERE  dbo.FormatPhone(Phone)[email protected];

A primeira consulta é garantida como ótima, vai buscar o telefone no índice.
A segunda consulta depende das características do dbo.FormatPhone. Pode ou não usar uma busca ótima.
A última consulta é garantida como ruim. Vai escanear a mesa.

Além disso, removi a dica NOLOCK, parece ser o tema do dia... Veja sintaxe para nolock em sql . NOLOCK é sempre a resposta errada. Use o isolamento de instantâneo.