Как заставить индекс на внутренних объединенных таблицах? - PullRequest
16 голосов
/ 22 февраля 2010

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

Ответы [ 2 ]

27 голосов
/ 22 февраля 2010

Предполагается, что индекс 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

0 голосов
/ 22 февраля 2010

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

Что вы пробовали до сих пор?

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

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

Начиная с MySQL 4.0.9, вы также можете использовать ИНДЕКС СИЛЫ, который действует как ИНДЕКС ИСПОЛЬЗОВАНИЯ (index_list) но с дополнением что сканирование таблицы предполагается очень дорого. Другими словами, Сканирование таблицы используется только при отсутствии способ использовать один из указанных индексов для найти строки в таблице.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...