¿Usar '=' o ME GUSTA para comparar cadenas en SQL?


169

Existe la discusión (casi religiosa), si debe usar LIKE o '=' para comparar cadenas en declaraciones SQL.

  • ¿Hay razones para usar LIKE?
  • ¿Hay razones para usar '='?
  • ¿Actuación? ¿Legibilidad?

Respuestas:


126

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.


55
Woops ... está bien, tomé el punto. Tabla con ~ 600 entradas, número de 10 dígitos como campo de comparación: ¡Igual es de 20 a 30 veces más rápido!
guerda

194

LIKEy el operador de igualdad tiene diferentes propósitos, no hacen lo mismo:
=es mucho más rápido, mientras que LIKEpuede interpretar comodines. Úselo =donde pueda y LIKEdonde deba.

SELECT * FROM user WHERE login LIKE 'Test%';

Muestra de coincidencias:

TestUser1
TestUser2
TestU
Test



14

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:

  • Juan
  • Juan
  • JUAN

Y si quieres enojarte mucho, puedes usar expresiones regulares:

select * from people where name ~ 'John.*'

Partidos:

  • Juan
  • Johnathon
  • Johnny

1
Hasta donde sé, la expresión regular y las palabras clave similares tienen un rendimiento peor que '='
Ceilingfish

Typo 'ilike' to 'like'
Salah Alshaal

9

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.

http://support.microsoft.com/kb/316626


7

Para la coincidencia de patrones use LIKE. Para coincidencia exacta =.


6

LIKEse usa para la coincidencia de patrones y =se usa para la prueba de igualdad (como se define COLLATIONen uso).

=puede usar índices, mientras que las LIKEconsultas 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.


4

LIKE hace coincidir como comodines char [*,?] En el shell
LIKE '% sufijo' - dame todo lo que termine con sufijo. No podría hacer eso con =
Depende del caso en realidad.


3

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".

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.