Maison > base de données > tutoriel mysql > FIND_IN_SET de MySQL ou une fonction équivalente peut-elle utiliser des indices ?

FIND_IN_SET de MySQL ou une fonction équivalente peut-elle utiliser des indices ?

Patricia Arquette
Libérer: 2024-11-05 21:22:02
original
203 Les gens l'ont consulté

Can MySQL's FIND_IN_SET or an Equivalent Function Utilize Indices?

MySQL FIND_IN_SET ou un équivalent peut-il utiliser des indices ?

La requête SELECT * FROM Foo WHERE FIND_IN_SET(id, '2,3') ne profite pas de l'index de clé primaire. Cela est évident lorsque l'on compare sa sortie EXPLAIN à la sortie de SELECT * FROM Foo WHERE id IN (2,3) qui utilise l'index.

Objectif : Construire une procédure stockée qui se comporte comme la deuxième requête, en utilisant l'index sans connaissance préalable de la chaîne séparée par des virgules contenant les identifiants.

Solution :

Créez une instruction préparée qui accepte une chaîne comme un paramètre :

CREATE PROCEDURE my_sp(@id_string NCHAR(1000))
Copier après la connexion

L'instruction préparée peut ensuite être exécutée avec la chaîne séparée par des virgules comme argument :

EXEC my_sp '2,3'
Copier après la connexion

Cette approche permet d'atteindre les conditions souhaitées suivantes :

  • le type est une plage (pas TOUS)
  • la clé n'est pas NULL

Ces conditions indiquent que l'index est utilisé.

Considérations de sécurité :

Les instructions préparées atténuent le risque d'attaques par injection SQL. Cependant, il est toujours crucial de garantir que les données fournies par l'utilisateur sont nettoyées pour empêcher les attaques par injection SQL de 2e niveau.

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