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

Der Versuch, die MySQL-Abfrage mit LEFT OUTER JOIN zu optimieren

Leider kann mysql (und vielleicht jedes dbms) Ausdrücke wie jobs.status != 331 and ack = 0 nicht optimieren weil B-Tree keine Struktur ist, die es erlaubt, schnell alles zu finden, was nicht gleich einem konstanten Wert ist. So erhalten Sie immer einen Fullscan.

Wenn es eine bessere Bedingung wie jobs.status = 331 and ack = 0 gäbe (Hinweis auf die Tatsache, dass ich != geändert habe zu = ), dann wäre es ein Rat, diese Abfrage zu beschleunigen:

  1. Teilen Sie die Abfrage in 2 auf, verbunden durch UNION ALL
  2. ersetzen Sie in einer Abfrage LEFT JOIN zu INNER JOIN (in demjenigen, der impliziert, dass wq.info is not NULL ist )