Maison  >  Article  >  base de données  >  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 ?

DDD
DDDoriginal
2024-11-07 16:50:03985parcourir

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 des approches alternatives 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 prendre en compte les précautions suivantes :

  • 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.
  • Analyses de tables : 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.

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