Niestety mysql (i być może każdy dbms) nie może zoptymalizować wyrażeń takich jak jobs.status != 331 and ack = 0
ponieważ B-Tree nie jest strukturą, która pozwala szybko znaleźć wszystko, co nie jest równe stałej wartości. Dzięki temu zawsze uzyskasz pełny skan.
Gdyby istniały lepsze warunki, takie jak jobs.status = 331 and ack = 0
(uwaga na fakt, że zmieniłem !=
do =
) radziłbym przyspieszyć to zapytanie:
- podziel zapytanie na 2 połączone przez
UNION ALL
- zamień w jednym zapytaniu
LEFT JOIN
doINNER JOIN
(w tym, który sugeruje, żewq.info is not NULL
)