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

Pouvez-vous utiliser des indices avec MySQL FIND_IN_SET ?

Linda Hamilton
Libérer: 2024-11-07 22:07:03
original
569 Les gens l'ont consulté

Can You Use Indices with MySQL FIND_IN_SET?

Exploiter des indices avec MySQL FIND_IN_SET ou équivalent

Lors de l'utilisation de FIND_IN_SET dans MySQL, il est crucial de reconnaître ses limites dans l'utilisation d'indices. Un contraste avec l'identifiant équivalent dans la construction (a, b) révèle que FIND_IN_SET présente un type "ALL" et n'a pas de clé définie, ce qui entraîne des performances inefficaces lorsque les indices sont disponibles.

Surmonter la limitation

Bien qu'il ne soit pas possible de faire directement en sorte que FIND_IN_SET utilise des indices, il existe une solution alternative pour utiliser des indices dans un contexte similaire. Cela implique la création d'une instruction préparée qui accepte une chaîne séparée par des virgules comme paramètre.

Exemple d'instruction préparée

Considérez l'instruction préparée suivante :

CREATE PROCEDURE get_data(IN comma_separated_ids TEXT)
BEGIN
  SELECT * FROM Foo WHERE id IN (comma_separated_ids);
END;
Copier après la connexion

Cette instruction préparée peut être appelée avec une chaîne d'identifiants séparés par des virgules comme argument. MySQL gérera automatiquement la conversion et effectuera une requête optimisée à l'aide d'index (si disponibles).

Explication de l'optimisation

La construction id IN (a, b, c) est reconnu par l'optimiseur de MySQL comme condition d'égalité sur la colonne de clé primaire (id). Étant donné que la colonne id est indexée, l'optimiseur peut utiliser l'index pour récupérer efficacement les lignes correspondantes, ce qui permet d'obtenir le type de « plage » souhaité et une utilisation efficace des clés.

Prévenir les attaques par injection SQL

Il est important de noter que la transmission des données fournies par l'utilisateur via des instructions préparées est une pratique recommandée pour empêcher les attaques par injection SQL. La base de données peut gérer en toute sécurité les conversions de chaînes et empêcher les entrées malveillantes d'affecter l'exécution de la requête.

Conclusion

Bien que FIND_IN_SET ne soit pas directement adapté à l'utilisation d'index, la solution fournie vous permet d'obtenir les mêmes fonctionnalités tout en exploitant les indices pour des performances optimales. En suivant les étapes décrites, vous pouvez créer des instructions préparées qui utilisent efficacement les index, améliorant ainsi la vitesse des requêtes et préservant l'intégrité des données.

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