Question

Je sais que la question est assez fondamentale et je pense que je connais la réponse ... mais je voudrais confirmer.

Ces requêtes sont-elles vraiment équivalentes?

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

Peut-être y at-il un surcoût lié à la performance lorsqu’il est utilisé sans joker?

J'ai une application qui utilise facultativement LIKE & amp; jokers. Actuellement, le SP procède de la sorte et ajoute les caractères génériques. Je pense mettre à jour la requête pour qu’il soit utilisé de la même manière, mais que l’application ajoute les caractères génériques si nécessaire.

Était-ce utile?

La solution

Comme @ocdecio le dit, si l'optimiseur est suffisamment intelligent, il ne devrait y avoir aucune différence, mais si vous voulez être sûr de ce qui se passe dans les coulisses, vous devez comparer les plans d'exécution de la requête.

Autres conseils

Réponse originale de Matt Whitfield de ici

Il existe une différence entre = et LIKE . Lorsque vous effectuez des comparaisons de chaînes à l'aide de LIKE , tous les caractères de la chaîne de modèle sont significatifs. Cela inclut les espaces de début ou de fin.

Donc, si vous avez une colonne qui est char ou nchar et non nvarchar ou varchar , il y aura avoir des résultats différents en raison d'espaces de fin.

Petit exemple pour reproduire ce problème:

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  '

Tout bon optimiseur réduirait la première expression à la seconde.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top