Pergunta

Eu sei que esta é uma questão bastante básico, e eu pensar Eu sei a resposta ... mas eu gostaria de confirmar.

São estas consultas verdadeiramente equivalente?

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

Talvez haja uma sobrecarga de desempenho em usar como sem curingas?

Eu tenho um aplicativo que usa opcionalmente COMO & wild cards. O SP faz atualmente o como e acrescenta os wild cards -. Estou pensando em apenas atualizar a consulta para uso como, mas tem o app anexar os cartões selvagens como necessário

Foi útil?

Solução

Como @ocdecio diz que, se o otimizador é suficiente inteligente não deveria haver nenhuma diferença, mas se você quer ter a certeza sobre o que está acontecendo nos bastidores você deve comparar os planos de execução dos dois consulta.

Outras dicas

Resposta Original de Matt Whitfield de aqui

Há uma diferença entre = e LIKE. Quando efectuar comparações de string usando LIKE, todos os caracteres na cadeia padrão são significativas. Isto inclui espaços antes ou depois.

Então, se você tem uma coluna que é char ou nchar e não nvarchar ou varchar, haverá resultados diferentes devido a espaços à direita.

pequeno exemplo para reproduzir esse comportamento:

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  '

Qualquer bom otimizador reduziria a primeira expressão para o segundo.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top