2015-03-18 5 views
2

Я пытаюсь объединить две большие таблицы, используя два поля VARCHAR (255).INNER JOIN with VARCHAR между двумя большими таблицами MySQL

tbl1 получил 100.000 строк - InnoDB

tbl2 получил 1.200.000 строки - InnoDB

В столбце "artno" индексируются в обеих таблицах.

Мой запрос выглядит следующим образом:

SELECT tbl1.id 
FROM tbl1 
INNER JOIN tbl2 ON tbl2.artno = tbl1.artno AND tbl2.brand = tbl1.brand 

Этот запрос занимает около 20 секунд для запуска.

Каков наилучший способ присоединиться к столам на VARCHAR?

Могу ли я увеличить производительность для моего запроса каким-либо образом?

+0

запрос в порядке. Вы должны создать правильные индексы в своей таблице. – Jens

+0

И как должны выглядеть индексы? На данный момент в обеих таблицах есть два «одиночных» индекса для artno. – hgerdin

+0

Используйте «Объясните», чтобы узнать, какой из них вам нужен. Я думаю, вам нужен один для обоих столбцов. – Jens

ответ

0

Может быть лучше всего проводить с выбора индекса использовать

Я думаю, что это для InnoDB сценария, как USE INDEX (IDX_artno)

SELECT tbl1.id 
FROM tbl1 USE INDEX (IDX_artno) 
INNER JOIN tbl2 USE INDEX (IDX_artno) ON tbl2.artno = tbl1.artno AND tbl2.brand = tbl1.brand 
Смежные вопросы