Как заставить индекс на внутренних соединенных таблицах?
Как заставить индексы по запросу, подобному этому. Мне нужно принудительно установить индекс на foo и bar отдельно.
SELECT foo.*, bar.*
FROM foo
INNER JOIN bar ON foo.rel_id = bar.rel_id
WHERE foo.status = 1
AND bar.status = 1
Ответы
Ответ 1
Предполагая, что индекс a существует на foo и index b на панели:
SELECT foo.*, bar.*
FROM foo FORCE INDEX (a)
INNER JOIN bar FORCE INDEX (b) ON foo.rel_id = bar.rel_id
WHERE foo.status = 1
AND bar.status = 1
заставит выбирать индекс на MySql
Ответ 2
Очевидным было бы создать индекс покрытия на rel_id
и status
для обеих таблиц, чтобы удовлетворить требование join и where.
Что вы пробовали так далеко?
изменить
Вы предоставляете подсказки индекса, но суть каждого, кто отвечает, кажется, что вам не нужно это делать.
Начиная с MySQL 4.0.9, вы также можете использовать FORCE INDEX, который действует как USE INDEX (index_list), но с добавлением что сканирование таблицы предполагается очень дорого. Другими словами, сканирование таблицы используется только в том случае, если нет способ использования одного из данных индексов для найдите строки в таблице.