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

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

DDD
Libérer: 2024-11-07 16:50:03
original
1030 Les gens l'ont consulté

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, ...)
Copier après la connexion

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!

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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal