Как мне принудительно индексировать запрос, подобный этому. Мне нужно принудительно указать индекс для 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
Как мне принудительно индексировать запрос, подобный этому. Мне нужно принудительно указать индекс для 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 в 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
Очевидным было бы создание покрывающего индекса для rel_id
и status
обеих таблиц, чтобы удовлетворить требования соединения и места.
Что ты уже испробовал?
Вы предоставляете индексные подсказки, но суть каждого отвечающего кажется, что вы не должны этого делать.
Начиная с MySQL 4.0.9, вы также можете использовать FORCE INDEX, который действует как USE INDEX (index_list), но с добавлением того, что сканирование таблицы считается очень дорогим. Другими словами, сканирование таблицы используется только в том случае, если нет возможности использовать один из заданных индексов для поиска строк в таблице.