Замедляет ли добавление условия объединения на две разные таблицы (исключая таблицу, к которой нужно присоединиться) запрос и производительность - PullRequest
0 голосов
/ 11 ноября 2018

У меня есть 3 таблицы в mySQL => table1, table2 и table3, и данные во всех трех таблицах большие (> 100k). Мое условие соединения:

select * from table1 t1 
join table2 t2 on t1.col1 = t2.col1
join table3 t3 on t3.col2 = t2.col2 and t3.col3 = t1.col3

Этот запрос отображает результат очень медленно ипо моему мнению, проблема во втором условии соединения, как будто я удаляю второе условие, запрос отображает результат немедленно.Кто-нибудь может объяснить причину медленного запроса?Заранее спасибо.

1 Ответ

0 голосов
/ 11 ноября 2018

У вас есть эти индексы?

table2:  (col1)
table3:  (col2, col3) -- in either order

Еще один совет: не используйте * (как в SELECT *), если вам не нужны все столбцы. Это предотвращает определенные оптимизации. Если вы хотите обсудить это далее, укажите реальный запрос и SHOW CREATE TABLE для каждой таблицы.

Если какой-либо из столбцов, используемых для объединения, не совпадает с типом данных, набором символов и сопоставлением, то индексы могут быть бесполезными.

Пожалуйста, предоставьте EXPLAIN SELECT ...; это даст некоторые подсказки, которые мы можем обсудить.

Сколько строк в наборе результатов? Похоже, более 100K? Если это так, то, возможно, время передачи по сети является реальным замедлением?

...