2015-06-09 3 views
0

Мой запрос работает слишком медленно .....
любые способы ускорить его?Как оптимизировать запрос, который работает слишком медленно (LEFT JOIN)

SELECT SQL_CALC_FOUND_ROWS a.*, b.*, c.*, d.*, e.*, f1.*, st6.* 
FROM tbl_a a 
LEFT JOIN tbl_b b ON a.m_id = b.m_id 
LEFT JOIN tbl_c c ON a.ms_id = c.ms_id 
LEFT JOIN tbl_d d ON a.gd_id = d.gd_id 
LEFT JOIN tbl_e e ON a.sd_id = e.sd_id 
LEFT JOIN tbl_f f1 ON a.tp_id = f1.tp_id 
LEFT JOIN 
     (
      SELECT g.*, GROUP_CONCAT(f2.tp_name SEPARATOR ',') tp_name, f2.tp AS tp 
      FROM tbl_g g 
      LEFT JOIN tbl_f f2 ON g.tp_id = f2.tp_id 
      GROUP BY s_id 
     )st6 ON st6.s_id = a.s_id 
+0

Можете ли вы выполнить 'EXPLAIN SELECT ....'? –

+1

Что вы получите для 'explain select ...' делите результат на вопрос. –

+0

Попробуйте добавить ключевое слово 'EXPLAIN' или' EXPLAIN EXTENDED' перед вашим заявлением и посмотреть его вывод для возможных подсказок или, если вы застряли в нем, обновите результаты до вашего вопроса, чтобы мы могли помочь вам больше. – kayess

ответ

0

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

Такой запрос лучше всего оптимизирован, если он может выполнить подзапрос первый. Однако «LEFT» - это намек на то, что этого не может быть. Удалите все левые и посмотрите, достаточно ли это быстро и дает «правильный» ответ.

Убедитесь, что в обеих указанных таблицах указано следующее: PRIMARY KEY или INDEX на gd_id. (И делать то же самое для других соединений.)

JOIN tbl_d d ON a.gd_id = d.gd_id 

Если вы по-прежнему нуждаются в помощи, обеспечить SHOW CREATE TABLE для каждой таблицы. И EXPLAIN SELECT ...;.

Смежные вопросы