Heim >Datenbank >MySQL-Tutorial >Kann MySQLs FIND_IN_SET oder eine gleichwertige Funktion Indizes verwenden?

Kann MySQLs FIND_IN_SET oder eine gleichwertige Funktion Indizes verwenden?

Patricia Arquette
Patricia ArquetteOriginal
2024-11-05 21:22:02291Durchsuche

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

Kann MySQL FIND_IN_SET oder ein Äquivalent Indizes verwenden?

Die Abfrage SELECT * FROM Foo WHERE FIND_IN_SET(id, '2,3') nutzt den Primärschlüsselindex nicht aus. Dies wird deutlich, wenn man die EXPLAIN-Ausgabe mit der Ausgabe für SELECT * FROM Foo WHERE id IN (2,3) vergleicht, die den Index verwendet.

Ziel: Konstruieren Sie eine gespeicherte Prozedur, die sich verhält Wie bei der zweiten Abfrage wird der Index ohne vorherige Kenntnis der durch Kommas getrennten Zeichenfolge mit den IDs verwendet.

Lösung:

Erstellen Sie eine vorbereitete Anweisung, die eine Zeichenfolge als akzeptiert ein Parameter:

CREATE PROCEDURE my_sp(@id_string NCHAR(1000))

Die vorbereitete Anweisung kann dann mit der durch Kommas getrennten Zeichenfolge als Argument ausgeführt werden:

EXEC my_sp '2,3'

Dieser Ansatz erreicht die folgenden gewünschten Bedingungen:

  • Typ ist Bereich (nicht ALLE)
  • Schlüssel ist nicht NULL

Diese Bedingungen zeigen an, dass der Index verwendet wird.

Sicherheitsüberlegungen:

Vorbereitete Anweisungen verringern das Risiko von SQL-Injection-Angriffen. Es ist jedoch immer noch wichtig, sicherzustellen, dass die vom Benutzer bereitgestellten Daten bereinigt werden, um SQL-Injection-Angriffe der zweiten Ebene zu verhindern.

Das obige ist der detaillierte Inhalt vonKann MySQLs FIND_IN_SET oder eine gleichwertige Funktion Indizes verwenden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn