Die Funktion FIND_IN_SET von MySQL ist dafür bekannt, dass sie keine Indizes verwendet, was zu ineffizienten Abfragen führt. Es gibt jedoch alternative Ansätze, um das gewünschte Indexierungsverhalten beim Umgang mit durch Kommas getrennten Listen zu erreichen.
Die in der bereitgestellten Antwort beschriebene Technik schlägt die Verwendung einer vorbereiteten Anweisung mit einem Parameter vor Akzeptieren einer Zeichenfolge in Form einer durch Kommas getrennten Liste. Durch die Verwendung des Bereichstyps mit einem Schlüssel ungleich NULL in der vorbereiteten Anweisung wird sichergestellt, dass bei der Ausführung der IN-Klausel Indizes verwendet werden.
Die folgende Abfrage führt beispielsweise eine Bereichssuche mit einem Index für durch Spalte „id“:
explain select * from ratings where id in (2331425, 430364, 4557546, 2696638, 4510549, ...)
SQL-Injection-Angriffe:
Die Verwendung von vom Benutzer bereitgestellten Daten in gespeicherten Prozeduren kann Möglichkeiten für SQL-Injection-Angriffe eröffnen. Eine ordnungsgemäße Bereinigung ist unerlässlich, um die Ausführung von bösartigem Code zu verhindern.Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3