Maison  >  Article  >  base de données  >  La fonction FIND_IN_SET de MySQL peut-elle exploiter les indices ?

La fonction FIND_IN_SET de MySQL peut-elle exploiter les indices ?

Patricia Arquette
Patricia Arquetteoriginal
2024-11-05 22:45:02237parcourir

Can MySQL's FIND_IN_SET Function Leverage Indices?

MySQL FIND_IN_SET peut-il être conçu pour exploiter des indices ?

Dans cette question, nous examinons le comportement de la fonction FIND_IN_SET de MySQL par rapport à l'IN opérateur, qui utilise des indices pour une récupération plus rapide des données.

Comprendre le problème

Comme illustré dans les résultats Explain fournis, FIND_IN_SET n'exploite pas l'index de clé primaire, ce qui conduit à performances sous-optimales. L'objectif est de trouver un moyen d'obtenir des performances similaires à celles de l'opérateur IN, qui utilise efficacement les indices.

Solution

Bien que FIND_IN_SET ne puisse pas être directement optimisé pour utiliser des indices, une solution de contournement existe en utilisant des instructions préparées.

Implémentation

  1. Créez une instruction préparée avec un paramètre pour accepter la chaîne séparée par des virgules.
  2. Construisez une requête dynamique à l'aide de la chaîne de paramètres et de l'opérateur IN.

Cette approche permet d'obtenir le comportement souhaité en utilisant des indices, similaires à l'opérateur IN, tout en permettant de paramétrer la requête avec une virgule. chaîne séparée.

Considérations supplémentaires

  • Méfiez-vous des attaques par injection SQL lors de la gestion des données fournies par l'utilisateur.
  • Analysez les données de la table après des modifications importantes pour optimiser les performances de l'index.
  • Comprendre le concept de « Tablescan » et ses implications sur les performances.

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