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;
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!