Maison  >  Article  >  base de données  >  ## Correspondance de modèles MySQL : LIKE ou LOCATE : lequel est le plus rapide ?

## Correspondance de modèles MySQL : LIKE ou LOCATE : lequel est le plus rapide ?

DDD
DDDoriginal
2024-10-25 07:51:29151parcourir

##  MySQL Pattern Matching: LIKE vs. LOCATE: Which is Faster?

Comparaison des performances de MySQL LIKE et LOCATE pour la correspondance de modèles

MySQL fournit deux fonctions principales pour effectuer des opérations de correspondance de modèles sur les chaînes : LIKE et SITUER. Bien que les deux servent des objectifs similaires, ils présentent des différences subtiles dans les caractéristiques de performances qui peuvent avoir un impact sur l'efficacité des requêtes.

L'opérateur LIKE utilise un caractère générique (%) pour faire correspondre les modèles au sein d'une chaîne. Par exemple :

<code class="sql">SELECT * FROM table WHERE column LIKE '%text%';</code>

La fonction LOCATE, quant à elle, recherche la première occurrence d'une sous-chaîne spécifique dans une chaîne et renvoie sa position. Un résultat non nul indique une correspondance :

<code class="sql">SELECT * FROM table WHERE LOCATE('text', column) > 0;</code>

Lors de la comparaison des performances de ces deux fonctions, on observe généralement que l'opérateur LIKE fonctionne légèrement plus rapidement que LOCATE. Cela est principalement dû au fait que LIKE ne nécessite pas de comparaison supplémentaire ("> 0") pour déterminer si une correspondance existe.

Pour illustrer cette différence, considérons les résultats de référence suivants :

<code class="shell">mysql> SELECT BENCHMARK(100000000,LOCATE('foo','foobar'));
+---------------------------------------------+
| BENCHMARK(100000000,LOCATE('foo','foobar')) |
+---------------------------------------------+
|                                           0 |
+---------------------------------------------+

mysql> SELECT BENCHMARK(100000000,LOCATE('foo','foobar') > 0);
+-------------------------------------------------+
| BENCHMARK(100000000,LOCATE('foo','foobar') > 0) |
+-------------------------------------------------+
|                                               0 |
+-------------------------------------------------+

mysql> SELECT BENCHMARK(100000000,'foobar' LIKE '%foo%');
+--------------------------------------------+
| BENCHMARK(100000000,'foobar' LIKE '%foo%') |
+--------------------------------------------+
|                                          0 |
+--------------------------------------------+</code>

Dans cet exemple, LIKE surpasse légèrement LOCATE, prenant environ 0,65 seconde de moins pour s'exécuter sur 100 millions d'itérations. Cependant, il est important de noter que les différences de performances peuvent varier en fonction de la longueur des chaînes et du modèle. recherché et la version de MySQL utilisée.

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn