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

Wie kann man diese Abfrage in einer großen Datenbank optimieren?

Sie haben außer dem Primärschlüssel keine Indizes. Sie müssen einen Index für Felder erstellen, die Sie in Ihrer WHERE-Anweisung verwenden. Ob Sie nur 1 Feld oder eine Kombination aus mehreren Feldern indizieren müssen, hängt von den anderen SELECTs ab, die Sie gegen diese Tabelle ausführen.

Denken Sie daran, dass REGEXP kann überhaupt keine Indizes verwenden, LIKE kann den Index nur verwenden, wenn er nicht mit einem Platzhalter beginnt (also LIKE 'a%' kann Index verwenden, aber LIKE '%a' kann nicht), größer als / kleiner als (<>) verwenden normalerweise auch keine Indizes.

So bleibt Ihnen der code und check Felder. Ich nehme an, dass viele Zeilen den gleichen Wert für check haben werden , also würde ich den Index mit code beginnen aufstellen. Indizes mit mehreren Feldern können nur in der Reihenfolge verwendet werden, in der sie definiert wurden...

Stellen Sie sich einen Index vor, der für die Felder code, check erstellt wurde . Dieser Index kann in Ihrer Abfrage verwendet werden (wobei die WHERE-Klausel beide Felder enthält), auch in der Abfrage mit nur code Feld, aber nicht in Abfrage mit nur check Feld.

Ist es wichtig, ORDER BY id ? Wenn nicht, lassen Sie es weg, es verhindert den Sortierdurchlauf und Ihre Abfrage wird schneller beendet.