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
Patricia Arquetteoriginal
2024-11-05 21:22:02213parcourir

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))

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'

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!

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