Respostas:
Para ver a diferença de desempenho, tente o seguinte:
SELECT count(*)
FROM master..sysobjects as A
JOIN tempdb..sysobjects as B
on A.name = B.name
SELECT count(*)
FROM master..sysobjects as A
JOIN tempdb..sysobjects as B
on A.name LIKE B.name
Comparar cadeias de caracteres com '=' é muito mais rápido.
LIKE
e o operador de igualdade tem propósitos diferentes, eles não fazem a mesma coisa:
=
é muito mais rápido, ao passo que LIKE
podem interpretar curingas. Use =
sempre que puder e LIKE
onde precisar.
SELECT * FROM user WHERE login LIKE 'Test%';
Correspondências de amostra:
TestUser1
TestUser2
TestU
Teste
Na minha pequena experiência:
"=" para correspondências exatas.
"LIKE" para correspondências parciais.
Existem alguns outros truques que o Postgres oferece para correspondência de strings (se esse for o seu banco de dados):
ILIKE, que é uma correspondência LIQ que não diferencia maiúsculas de minúsculas:
select * from people where name ilike 'JOHN'
Partidas:
E se você quiser ficar realmente bravo, pode usar expressões regulares:
select * from people where name ~ 'John.*'
Partidas:
Assim como um aviso, o operador '=' preencherá cadeias de caracteres com espaços no Transact-SQL. Então 'abc' = 'abc '
, retornará verdadeiro; 'abc' LIKE 'abc '
retornará falso. Na maioria dos casos, '=' estará correto, mas em um caso recente meu não estava.
Portanto, embora '=' seja mais rápido, o LIKE pode indicar mais explicitamente suas intenções.
LIKE
é usado para correspondência de padrões e =
é usado para teste de igualdade (conforme definido pelo COLLATION
em uso).
=
pode usar índices enquanto as LIKE
consultas geralmente exigem o teste de cada registro no conjunto de resultados para filtrá-lo (a menos que você esteja usando a pesquisa de texto completo) para obter =
um melhor desempenho.
Há outro motivo para usar "like", mesmo que o desempenho seja mais lento: os valores dos caracteres são implicitamente convertidos em número inteiro quando comparados, portanto:
declare @transid varchar (15)
if @transid! = 0
fornecerá um erro "A conversão do valor varchar '123456789012345' excedeu a capacidade de uma coluna int".