Cette question contourne ce que je me demande, mais les réponses ne l'abordent pas exactement.
Il semblerait que en général '=' est plus rapide que 'like' lors de l'utilisation de caractères génériques. Cela semble être la sagesse conventionnelle. Toutefois, supposons que je dispose d'une colonne contenant un nombre limité de différents identifiants fixes, codés en dur, de type varchar, et que je souhaite sélectionner toutes les lignes correspondant à l'un d'entre eux :
select * from table where value like 'abc%'
y
select * from table where value = 'abcdefghijklmn'
La fonction "Like" ne devrait avoir besoin de tester que les trois premiers caractères pour trouver une correspondance, alors que la fonction "=" doit comparer la chaîne entière. Dans ce cas, il me semble que "like" aurait un avantage, toutes choses égales par ailleurs.
Il s'agit d'une question générale et académique, et le type de base de données ne devrait donc pas avoir d'importance, mais le problème est apparu avec SQL Server 2005.
30 votes
Une chose importante que vous avez oubliée est de savoir si oui ou non
value
est indexé. Si c'est le cas, alors=
est une simple recherche sans balayage de table nécessaire et battra à plates coutures n'importe quelleLIKE
que vous lui envoyez.8 votes
@Daniel Je pense que c'est incorrect. A
LIKE
avec un caractère générique à la fin est SARGable et va donc effectuer une recherche de plage sur un index, sans balayage de table en vue. Cette recherche de plage peut rivaliser assez facilement avec une recherche de type=
et dans de nombreux cas (par exemple si toutes les lignes satisfaisantes sont sur une page, une condition non improbable), les performances pourraient être exactement les mêmes, avec le même nombre de lectures.0 votes
Mon "toutes choses égales par ailleurs" visait à couvrir la question de "l'indexation ou non", mais il semble qu'il y ait au moins une certaine controverse sur la différence que cela ferait, d'après mes commentaires sur les autres réponses.
0 votes
Voir ma réponse. J'ai d'abord fait un test sans indexation et les performances sont identiques (les deux balayages de table étaient exactement les mêmes). J'ai supposé pour mon scénario de test qu'il serait indexé, sinon pourquoi vous préoccuper des performances ?
6 votes
Le fait de parler de "like" dans cette question et dans les réponses nous fait ressembler à une bande de lycéennes. Comme, totalement.