Pregunta

Sé que esta es una pregunta bastante básica, y creo sé la respuesta ... pero me gustaría confirmar.

¿Estas consultas son realmente equivalentes?

SELECT * FROM FOO WHERE BAR LIKE 'X'
SELECT * FROM FOO WHERE BAR ='X'

¿Quizás hay una sobrecarga de rendimiento en el uso como sin comodines?

Tengo una aplicación que utiliza opcionalmente LIKE & amp; comodines El SP actualmente hace lo mismo y agrega los comodines: estoy pensando en actualizar la consulta para usar como me gusta, pero que la aplicación agregue los comodines según sea necesario.

¿Fue útil?

Solución

Como dice @ocdecio, si el optimizador es lo suficientemente inteligente, no debería haber ninguna diferencia, pero si desea asegurarse de lo que está sucediendo entre bambalinas, debe comparar los planes de ejecución de las dos consultas.

Otros consejos

Respuesta original de Matt Whitfield de aquí

Hay una diferencia entre = y LIKE . Cuando realiza comparaciones de cadenas utilizando LIKE , todos los caracteres en la cadena de patrón son significativos. Esto incluye espacios iniciales o finales.

Entonces, si tienes una columna que es char o nchar y no nvarchar o varchar , aparecerá ser resultados diferentes debido a espacios finales.

Pequeño ejemplo para reproducir este comportamiento:

CREATE TABLE #temp (nam [varchar](MAX))
INSERT INTO [#temp] ([nam])
VALUES ('hello')
INSERT INTO [#temp] ([nam])
VALUES ('hello  ')

SELECT * FROM #temp WHERE [nam] = 'hello  '

SELECT * FROM #temp WHERE [nam] LIKE 'hello  '

Cualquier buen optimizador reduciría la primera expresión a la segunda.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top