Итак, у нас есть две таблицы в двух базах данных: db1
и table1
и db2
и table2
. Тем не менее, попытка сделать LEFT JOIN
на них занимает три минуты. Безумный, я знаю.MySQL LEFT JOIN slow, индекс не используется
SELECT * FROM `db1`.`table1` AS a LEFT JOIN `db2`.`table2` AS b ON a.col=b.col
a
- около 14 000 строк. b
- около 825 000 строк.
У нас есть col
как a
, так и b
с индексированием. col
, в обоих случаях, VARCHAR(16)
с latin1_swedish_ci
сопоставление.
Запуск ОБЪЯСНИТЬ
EXPLAIN SELECT * FROM `db1`.`table1` AS a LEFT JOIN `db2`.`table2` AS b ON a.col=b.col
показывает нам, что индекс не используется ни для таблицы. Я предполагаю, что поэтому производительность настолько ужасна.
1 SIMPLE a ALL NULL NULL NULL NULL 14174
1 SIMPLE b ALL NULL NULL NULL NULL 824687
Однако, я не понимаю, почему это происходит и как это исправить. Присоединение b
к другим таблицам, которые намного больше работают за считанные секунды, и индексирование соответствующим образом используется. Что происходит в этом случае и какие шаги я должен предпринять, чтобы исправить это?
также вы можете использовать FORCE_INDEX, чтобы указать индекс для MySQL –
@SamD 'FORCE INDEX' не привел к использованию используемого индекса. – MirroredFate
@MirroredFate как насчет SELECT * FROM table1 USE INDEX (col1_index, col2_index) –