"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > Comment puis-je faire en sorte que la fonction FIND_IN_SET de MySQL utilise des index ?

Comment puis-je faire en sorte que la fonction FIND_IN_SET de MySQL utilise des index ?

Publié le 2024-11-12
Parcourir:629

How Can I Make MySQL's FIND_IN_SET Function Utilize Indices?

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

La fonction FIND_IN_SET de MySQL est connue pour ne pas utiliser d'index, ce qui entraîne des requêtes inefficaces. Cependant, il existe d'autres approches pour obtenir le comportement d'indexation souhaité lorsqu'il s'agit de listes séparées par des virgules.

L'approche Range

La technique décrite dans la réponse fournie suggère d'utiliser une instruction préparée avec un paramètre accepter une chaîne sous la forme d'une liste séparée par des virgules. En utilisant le type de plage avec une clé non NULL dans l'instruction préparée, cela garantit que les index seront utilisés lors de l'exécution de la clause IN.

Par exemple, la requête suivante effectue une recherche de plage avec un index sur le Colonne 'id' :

explain 
select * from ratings where id in (2331425, 430364, 4557546, 2696638, 4510549, ...)

Précautions et mises en garde

Bien que cette approche permette des requêtes indexées efficaces, il est crucial de considérez ce qui suit précautions :

  • Attaques par injection SQL : L'utilisation de données fournies par l'utilisateur dans des procédures stockées peut ouvrir la voie à des attaques par injection SQL. Une désinfection appropriée est essentielle pour empêcher l'exécution de code malveillant.
  • Tablescans : Si la colonne utilisée pour la recherche de plage n'est pas indexée ou a des valeurs non nulles, cela peut entraîner une analyse de table redoutée. , ce qui est très inefficace pour les grands ensembles de données.
Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3