Как заставить индексы для запроса, подобного этому. Мне нужно форсировать индекс для 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
Предполагается, что индекс a существует для foo, а индекс 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
Очевидной вещью будет создание покрывающего индекса на rel_id и status обеих таблиц для удовлетворения требованиям соединения и где.
rel_id
status
Что вы пробовали до сих пор?
Вы предоставляете индексные подсказки , но суть всех, кто отвечает, кажется, что вам не нужно этого делать.
Начиная с MySQL 4.0.9, вы также можете использовать ИНДЕКС СИЛЫ, который действует как ИНДЕКС ИСПОЛЬЗОВАНИЯ (index_list) но с дополнением что сканирование таблицы предполагается очень дорого. Другими словами, Сканирование таблицы используется только при отсутствии способ использовать один из указанных индексов для найти строки в таблице.