Maison >base de données >tutoriel mysql >## Qu'est-ce qui est le plus rapide dans MySQL : `LIKE` ou `LOCATE` pour la correspondance de chaînes ?
Laquelle est la plus rapide : MySQL LIKE vs LOCATE ?
Dans MySQL, il existe deux fonctions couramment utilisées pour la correspondance de modèles dans les chaînes : LIKE et LOCALISER. Bien que les deux fonctions puissent être utilisées pour rechercher des sous-chaînes dans une chaîne, elles diffèrent par leur approche et leurs caractéristiques de performances.
LIKE vs LOCATE
L'opérateur LIKE utilise des caractères génériques pour faire correspondre les modèles de personnages. Il prend en charge divers caractères génériques, notamment % (correspond à n'importe quel nombre de caractères) et _ (correspond à un seul caractère). Par exemple :
<code class="sql">SELECT * FROM table WHERE column LIKE '%text%';</code>
Cette requête recherche toutes les lignes où la valeur de la colonne contient la chaîne "texte" n'importe où à l'intérieur.
D'autre part, la fonction LOCATE recherche la position d'une sous-chaîne spécifiée dans une chaîne. Il renvoie l'index de la première occurrence de la sous-chaîne, ou 0 si la sous-chaîne n'est pas trouvée. Par exemple :
<code class="sql">SELECT * FROM table WHERE LOCATE('text', column) > 0;</code>
Cette requête recherche toutes les lignes où la valeur de la colonne contient la sous-chaîne « texte » n'importe où à l'intérieur.
Comparaison des performances
En général, l'opérateur LIKE est légèrement plus rapide que LOCATE. En effet, LIKE n'a pas besoin d'effectuer une comparaison supplémentaire pour vérifier si le résultat est supérieur à 0.
Pour démontrer cette différence de performances, considérez les points de référence suivants :
<code class="sql">mysql> SELECT BENCHMARK(100000000,LOCATE('foo','foobar')); +---------------------------------------------+ | BENCHMARK(100000000,LOCATE('foo','foobar')) | +---------------------------------------------+ | 0 | +---------------------------------------------+ 1 row in set (3.24 sec) mysql> SELECT BENCHMARK(100000000,LOCATE('foo','foobar') > 0); +-------------------------------------------------+ | BENCHMARK(100000000,LOCATE('foo','foobar') > 0) | +-------------------------------------------------+ | 0 | +-------------------------------------------------+ 1 row in set (4.63 sec) mysql> SELECT BENCHMARK(100000000,'foobar' LIKE '%foo%'); +--------------------------------------------+ | BENCHMARK(100000000,'foobar' LIKE '%foo%') | +--------------------------------------------+ | 0 | +--------------------------------------------+ 1 row in set (4.28 sec)</code>
Comme les résultats du test montrent que LIKE est légèrement plus rapide que LOCATE lors de la recherche d'une sous-chaîne dans une chaîne. Cependant, la différence de performances est relativement faible pour la plupart des cas d'utilisation pratiques.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!