Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Beste Art der Indizierung, wenn eine LIKE-Klausel vorhanden ist

Ja, was Sie hier haben, ist ein Datenbank-Killer

Ein B-Tree-Index kann für Spaltenvergleiche in Ausdrücken verwendet werden, die die Operatoren =,>,>=, <, <=oder BETWEEN verwenden. Der Index kann auch für LIKE-Vergleiche verwendet werden, wenn das Argument für LIKE eine konstante Zeichenfolge ist, die nicht mit einem Platzhalterzeichen beginnt.

Quelle:http://dev.mysql.com /doc/refman/5.7/en/index-btree-hash.html

Das bedeutet, dass Ihre LIKE-Abfrage den Index nicht verwenden kann, und Sie haben dann zwei Likes, die mit einem OR verbunden sind. Wem das noch nicht reicht, der hat noch einen NOT IN-Vergleich eingeworfen.

Aber zum Glück ist der zweite LIKE-Ausdruck nicht so schlimm, er beginnt nicht mit einem Platzhalter. Ihre beste Hoffnung ist es also, einen zusammengesetzten Index für usage_guidance, name zu erstellen

Wenn Sie Ihre SHOW CREATE TABLE und ein paar Zeilen Beispieldaten + die erwartete Ausgabe posten könnten, bekommen wir vielleicht eine Idee, ob es eine Möglichkeit gibt, diese Abfrage umzuschreiben.