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

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

person David    schedule 22.02.2010    source источник
comment
Не могли бы вы объяснить, что вы подразумеваете под принудительным индексированием. Вы имеете в виду создать его автоматически (не будет работать) или вы имеете в виду заставить mysql использовать его (см. сообщения ниже).   -  person AxelEckenberger    schedule 22.02.2010


Ответы (2)


Предположим, что индекс a существует в foo, а индекс b в bar:

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

person Ηλίας    schedule 22.02.2010

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

Что ты уже испробовал?

редактировать

Вы предоставляете индексные подсказки, но суть каждого отвечающего кажется, что вы не должны этого делать.

Начиная с MySQL 4.0.9, вы также можете использовать FORCE INDEX, который действует как USE INDEX (index_list), но с добавлением того, что сканирование таблицы считается очень дорогим. Другими словами, сканирование таблицы используется только в том случае, если нет возможности использовать один из заданных индексов для поиска строк в таблице.

person Lieven Keersmaekers    schedule 22.02.2010
comment
Полностью согласен, однако мой вопрос заключается в том, как принудительно индексировать внутреннее соединение. - person David; 22.02.2010