Ausnutzung von Indizes mit MySQL FIND_IN_SET oder einem Äquivalent
Bei der Verwendung von FIND_IN_SET in MySQL ist es wichtig, die Einschränkungen bei der Verwendung von Indizes zu erkennen. Ein Vergleich mit der entsprechenden ID im (a, b)-Konstrukt zeigt, dass FIND_IN_SET einen „ALL“-Typ aufweist und keinen definierten Schlüssel hat, was zu einer ineffizienten Leistung führt, wenn Indizes verfügbar sind.
Überwindung der Einschränkung
Während es nicht möglich ist, FIND_IN_SET direkt dazu zu bringen, Indizes zu verwenden, gibt es eine alternative Lösung für die Verwendung von Indizes in einem ähnlichen Kontext. Dazu gehört das Erstellen einer vorbereiteten Anweisung, die eine durch Kommas getrennte Zeichenfolge als Parameter akzeptiert.
Beispiel für eine vorbereitete Anweisung
Betrachten Sie die folgende vorbereitete Anweisung:
CREATE PROCEDURE get_data(IN comma_separated_ids TEXT) BEGIN SELECT * FROM Foo WHERE id IN (comma_separated_ids); END;
Diese vorbereitete Anweisung kann mit einer Zeichenfolge durch Kommas getrennter IDs als Argument aufgerufen werden. MySQL übernimmt automatisch die Konvertierung und führt eine optimierte Abfrage mithilfe von Indizes durch (sofern verfügbar).
Erklärung der Optimierung
Das id IN (a, b, c)-Konstrukt wird vom MySQL-Optimierer als Gleichheitsbedingung für die Primärschlüsselspalte (id) erkannt. Da die ID-Spalte indiziert ist, kann der Optimierer den Index nutzen, um die entsprechenden Zeilen effizient abzurufen, was zum gewünschten „Bereich“-Typ und einer effizienten Schlüsselverwendung führt.
Verhinderung von SQL-Injection-Angriffen
Es ist wichtig zu beachten, dass die Weitergabe von vom Benutzer bereitgestellten Daten über vorbereitete Anweisungen eine empfohlene Vorgehensweise zur Verhinderung von SQL-Injection-Angriffen ist. Die Datenbank kann die Zeichenfolgenkonvertierungen sicher verarbeiten und verhindern, dass böswillige Eingaben die Abfrageausführung beeinträchtigen.
Fazit
Während FIND_IN_SET nicht direkt für die Verwendung von Indizes geeignet ist, ist die bereitgestellte Lösung ermöglicht es Ihnen, die gleiche Funktionalität zu erreichen und gleichzeitig Indizes für eine optimale Leistung zu nutzen. Indem Sie die beschriebenen Schritte befolgen, können Sie vorbereitete Anweisungen erstellen, die Indizes effektiv nutzen, die Abfragegeschwindigkeit verbessern und die Datenintegrität wahren.
Das obige ist der detaillierte Inhalt vonKönnen Sie Indizes mit MySQL FIND_IN_SET verwenden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!