Maison > base de données > tutoriel mysql > le corps du texte

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

DDD
Libérer: 2024-10-25 07:51:29
original
150 Les gens l'ont consulté

##  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>
Copier après la connexion

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>
Copier après la connexion

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>
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!