Оптимизация запросов для INNER JOIN - PullRequest
1 голос
/ 24 октября 2011

У меня есть этот запрос ниже:

SELECT a.id, b.item_name 
FROM table_1 as a 
INNER JOIN table_2 as b on a.item_id = b.item_id

Есть индекс на a.bid в качестве основного и индекс на a.item_id, и есть индекс на b.item_id в качестве основного и индекс на b.item_name

Однако, когда я запускаю запрос через EXPLAIN, первичная таблица становится table_1, и индекс не используется, поэтому выполняется полное сканирование.Почему бы ему не присоединиться к индексу для b.item_id?

Ответы [ 2 ]

0 голосов
/ 24 октября 2011

Необходимо выполнить полное сканирование хотя бы одной таблицы, поскольку вы запрашиваете все записи.Похоже, он выбрал table_1.Индекс должен использоваться для table_2.

Если вы дополнительно добавите предложение where, вы можете избежать сканирования этой таблицы.Но если вам действительно нужны все строки, то сканирование - это самый быстрый способ их получить.

0 голосов
/ 24 октября 2011

Он выполняет сканирование таблицы, потому что вы запрашиваете все подходящие строки. Добавьте WHERE a.id = <any id>, и он должен использовать индекс.

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