У меня есть запрос, который выглядит следующим образом:
SELECT columnA, columnB, ...
FROM tableA
JOIN tableB USING (columnX)
JOIN tableC USING (columnY)
WHERE
tableC.columnZ = zzz AND
tableA.columnA = aaa
GROUP BY ...
Когда я запускаю EXPLAIN
для этого запроса, он показывает, что оптимизатор запросов сначала выбирает из tableC
, но по какой-то причине он не 't использовать индекс, даже если у меня есть индекс tableC.columnZ
.
. Как мне принудительно использовать tableC.columnZ
в этом запросе?Я попытался:
...
JOIN tableC USING (columnY) FORCE INDEX FOR JOIN (columnZ)
...
, но это не заставило использовать этот индекс.
Я также попытался изменить порядок выбора:
...
FROM tableC FORCE INDEX (columnZ)
JOIN tableA USING (columnY)
JOIN tableB USING (columnX)
...
иэто также не сработало.
Есть ли какие-либо советы о том, как заставить использовать этот индекс, или какие-либо другие предложения по ускорению выполнения этого запроса?
ПРИМЕЧАНИЕ. columnZ
- это DATETIME
в столбце * и предложении WHERE
: WHERE year(columnZ) = 2018
не уверен, что это корень причины?