残念ながら、mysql(およびおそらく任意のdbms)は、jobs.status != 331 and ack = 0
のような式を最適化できません。 B-Treeは、定数値と等しくないものをすばやく見つけることができる構造ではないためです。したがって、常にフルスキャンを取得できます。
jobs.status = 331 and ack = 0
のようなより良い条件があった場合 (!=
を変更したことに注意してください =
へ )次に、このクエリを高速化することをお勧めします:
- クエリを2に分割し、
UNION ALL
で結合します - 1つのクエリで置換
LEFT JOIN
INNER JOIN
へ (wq.info is not NULL
)