SQL COMO sem curingas o mesmo que '='?
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
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.