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:
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!