Différence entre LIKE et = dans MYSQL?
Quelle est la différence entre
SELECT foo FROM bar WHERE foobar='$foo'
ET
SELECT foo FROM bar WHERE foobar LIKE'$foo'
source d'informationauteur Click Upvote
Vous devez vous connecter pour publier un commentaire.
COMME peut faire des jokers:
Si vous n'avez pas besoin de filtrage, puis utilisez = au lieu de COMME. C'est plus rapide et plus sécurisé. (Vous utilisez les requêtes paramétrées, non?)
= dans SQL ne l'appariement exact.
COMME ne générique correspondant, à l'aide de '%', comme les caractères multi-match symbole et '_' comme caractère unique match de symbole. '\' par défaut est le caractère d'échappement.
foobar = '$foo'
etfoobar LIKE '$foo'
va se comportent de la même, parce que ni la chaîne contient un caractère générique.foobar LIKE '%foo'
va tout se terminant par "foo".LIKE
a aussi unESCAPE
clause de sorte que vous pouvez définir un caractère d'échappement. Cela vous permettra de correspondance littérale '%' ou '_' au sein de la chaîne. Vous pouvez également faireNOT LIKE
.Le site de MySQL a la documentation sur l'opérateur LIKE. La syntaxe est
S'il vous plaît garder à l'esprit que bien que MySQL va faire des moulages dépend de la situation: COMME effectuera chaîne de fonte, tandis que = effectuera int exprimés. Compte tenu de la situation de l':
produira
alors que
produira
Selon la page de Référence de MYSQLles espaces sont importants dans COMME mais pas =, et vous pouvez utiliser des caractères génériques, % pour tous les caractères, et _ pour un seul caractère.
Je pense qu'en terme de vitesse = est plus rapide que COMME. Comme indiqué, = effectue une correspondance exacte et COMME pouvez utiliser un joker en cas de besoin.
J'ai toujours utiliser le signe = à chaque fois que je connais les valeurs de quelque chose. Par exemple
Alors pour aime-je utiliser des choses comme:
Si vous utilisez Oracle Développeurs de l'Outil, vous pouvez le tester avec les Expliquer afin de déterminer l'impact sur la base de données.
Le résultat final sera le même, mais le moteur de requête utilise la même logique pour arriver à la réponse. En général, COMME des requêtes de brûler plus de cycles que "=" requêtes. Mais quand aucun caractère générique est fourni, je ne suis pas sûr de la façon dont l'optimiseur peut traiter que.
Avec l'exemple dans votre question, il n'y a pas de différence.
Mais, comme Jesse dit que vous pouvez faire des jokers
Plus d'infos:
http://dev.mysql.com/doc/refman/5.0/en/string-comparison-functions.html
Un peu og google ne fait pas de mal...
Une clause where avec le signe égal (=) fonctionne très bien si on veut faire une correspondance exacte. Mais il y a peut être une condition où nous voulons filtrer tous les résultats au cas où "foobar" doit contenir "foo". Cela peut être manipulé à l'aide de SQL clause LIKE alongwith clause where.
Si SQL COMME clause est utilisé avec d' % caractères, puis il va travailler comme un caractère générique.
Sans caractère % COMME clause est très similaire au signe égal alongwith clause where.
Dans votre exemple, ils sont sémantiquement égaux et doivent retourner le même résultat.
Cependant, COMME vous donnera la capacité de filtrage avec des caractères génériques.
Vous devriez également noter que = pourraient vous donner un boost de performance sur certains systèmes, donc si vous êtes par exemple, la recherche d'une exakt nombre, = serait la méthode préférée.
Ressemble beaucoup à pris à partir d'un script PHP. L'intention était de faire correspondre à un modèle, le contenu de la variable
$foo
contre lafoo
champ de base de données, mais je parie qu'il était censé être écrit dans guillemetsde sorte que le contenu de $foo seraient intégrés dans la requête.Comme vous le dites, il n'y a PAS de différence.
Qu'il pourrait être plus lente, mais je parie que MySQL se rend compte il n'y a pas de caractères génériques dans la chaîne de recherche, afin de ne pas faire COMME le crépitement d'appariement après tout, si vraiment, pas de différence.
Dans mon cas, je trouve
Like
étant plus rapide que=
Like
récupéré un certain nombre de lignes dans 0.203 secondes la première fois, puis 0.140 secs=
retourne extraites les mêmes lignes de de 0,156 secondes constammentFaites votre choix
J'ai trouvé une différence importante entre
LIKE
et signe égal=
!Exemple: j'ai une table avec un champ "ID" (type: int(20) ) et un dossier qui contient la valeur "123456789"
Si je fais:
Dossier avec l'ID = '123456789' (est un résultat incorrect)
Si je fais:
Aucun enregistrement n'est trouvé (c'est correct)
Donc, au moins pour ENTIER-champs, cela semble une différence importante...