У меня есть запрос вроде:
select * from x join (
select * from y join z on y.id=z.id
) as t on x.name = t.name
Этот запрос занимает 5 минут в mysql 5.1
, в то время как с тем же набором данных он занимает всего 100 миллисекунд в mysql 5.7
. Mysql 5.1
не учитывает тот факт, что имя столбца является ключом во всех таблицах. В основном все таблицы имеют столбец name
и они проиндексированы:
KEY `name_index` (`name`),
Я пытался использовать принудительный индекс, чтобы убедить сервер использовать индекс, но безрезультатно. Это означает, что обе версии жалуются на синтаксис.
select * from x join (
select * from y join z on y.id=z.id
) as t force index(`name_index`) on x.name = t.name
У вас ошибка в синтаксисе SQL; проверьте руководство, соответствующее вашей версии сервера MySQL, на предмет правильного синтаксиса для использования рядом с 'принудительным индексом (name_index
) для x.name = t.name' в строке 3
Кто-нибудь знает какой-нибудь обходной путь, заставляющий mysql использовать индекс по результатам объединения?