191 votes

Utiliser '=' ou LIKE pour comparer des chaînes de caractères en SQL ?

Il y a la discussion (presque religieuse) pour savoir si vous devez utiliser LIKE ou '=' pour comparer des chaînes de caractères dans les instructions SQL.

  • Y a-t-il des raisons d'utiliser LIKE ?
  • Y a-t-il des raisons d'utiliser '=' ?
  • Performances ? La lisibilité ?

212voto

soulmerge Points 37314

LIKE et l'opérateur d'égalité ont des objectifs différents, ils ne font pas la même chose :
= est beaucoup plus rapide, alors que LIKE peut interpréter les caractères génériques. Utilisez = partout où vous le pouvez et LIKE partout où vous le devez.

SELECT * FROM user WHERE login LIKE 'Test%';

Exemples de correspondances :

TestUser1
TestUser2
TestU
Test

141voto

Techmaddy Points 1806

Pour voir la différence de performance, essayez ceci :

SELECT count(*)
FROM master..sysobjects as A
JOIN tempdb..sysobjects as B
on A.name = B.name

SELECT count(*)
FROM master..sysobjects as A
JOIN tempdb..sysobjects as B
on A.name LIKE B.name

La comparaison de chaînes de caractères avec '=' est beaucoup plus rapide.

5 votes

Woops... ok, j'ai pris le point. Tableau avec ~600 entrées, numéro à 10 chiffres comme champ de comparaison : Equal est 20 à 30 fois plus rapide !

40voto

Stu Andrews Points 435

Dans ma petite expérience :

"=" pour les correspondances exactes.

"LIKE" pour les correspondances partielles.

6 votes

\= n'est pas sensible à la casse

14voto

Ceilingfish Points 2508

Il existe quelques autres astuces que Postgres propose pour la correspondance des chaînes de caractères (si c'est votre BD) :

ILIKE, qui est une correspondance LIKE insensible à la casse :

select * from people where name ilike 'JOHN'

Matches :

  • John
  • john
  • JOHN

Et si vous voulez vraiment vous énerver, vous pouvez utiliser des expressions régulières :

select * from people where name ~ 'John.*'

Matches :

  • John
  • Johnathon
  • Johnny

1 votes

Pour autant que je sache, les expressions régulières et les mots-clés similaires sont moins performants que '='.

0 votes

Erreur de frappe "ilike" en "like".

8voto

Techmaddy Points 1806

Pour la correspondance des motifs, utilisez LIKE. Pour une correspondance exacte, utilisez =.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X