Как заставить индекс на внутренних соединенных таблицах?

Как заставить индексы по запросу, подобному этому. Мне нужно принудительно установить индекс на 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), но с добавлением что сканирование таблицы предполагается очень дорого. Другими словами, сканирование таблицы используется только в том случае, если нет способ использования одного из данных индексов для найдите строки в таблице.