Индекс силы MySQL для объединенной таблицы - когда оптимизатор выбирает сначала из объединенной таблицы - PullRequest
0 голосов
/ 25 сентября 2018

У меня есть запрос, который выглядит следующим образом:

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 не уверен, что это корень причины?

1 Ответ

0 голосов
/ 25 сентября 2018

Оказывается, что проблема не имела ничего общего с первоначальным вопросом, и это было потому, что я использовал функцию в предложении where.

Изменение этого предложения с:

WHERE year(columnZ) = 2018

на:

WHERE columnZ >= '2018-01-01 00:00:00'

исправлена ​​ошибка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...