Respuestas:
Para ver la diferencia de rendimiento, intente esto:
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 cadenas con '=' es mucho más rápido.
LIKE
y el operador de igualdad tiene diferentes propósitos, no hacen lo mismo:
=
es mucho más rápido, mientras que LIKE
puede interpretar comodines. Úselo =
donde pueda y LIKE
donde deba.
SELECT * FROM user WHERE login LIKE 'Test%';
Muestra de coincidencias:
TestUser1
TestUser2
TestU
Test
En mi pequeña experiencia:
"=" para coincidencias exactas.
"ME GUSTA" para Partidos Parciales.
Hay un par de otros trucos que Postgres ofrece para la coincidencia de cadenas (si ese es su DB):
ILIKE, que es un partido LIKE sin distinción entre mayúsculas y minúsculas:
select * from people where name ilike 'JOHN'
Partidos:
Y si quieres enojarte mucho, puedes usar expresiones regulares:
select * from people where name ~ 'John.*'
Partidos:
Al igual que un aviso, el operador '=' rellenará cadenas con espacios en Transact-SQL. Entonces 'abc' = 'abc '
volverá verdadero; 'abc' LIKE 'abc '
devolverá falso. En la mayoría de los casos, '=' será correcto, pero en un caso reciente mío no lo fue.
Entonces, mientras '=' es más rápido, LIKE podría indicar más explícitamente sus intenciones.
LIKE
se usa para la coincidencia de patrones y =
se usa para la prueba de igualdad (como se define COLLATION
en uso).
=
puede usar índices, mientras que las LIKE
consultas generalmente requieren probar cada registro en el conjunto de resultados para filtrarlo (a menos que esté utilizando la búsqueda de texto completo) para que =
tenga un mejor rendimiento.
Hay otra razón para usar "me gusta" incluso si el rendimiento es más lento: los valores de los caracteres se convierten implícitamente en enteros en comparación, por lo que:
declarar @transid varchar (15)
si @transid! = 0
le dará un error "La conversión del valor varchar '123456789012345' desbordó una columna int".