Запрос MySQL работает медленно при присоединении к таблицам, содержащим BLOB

У меня есть запрос выбора MySQL с большим количеством левых соединений, но только одно из соединений вызывает серьезные проблемы с производительностью. В этой проблемной таблице есть 2 поля BLOB, и когда я оставил соединение с ее первичным ключом, выполнение запроса заняло в 20 раз больше времени. Поскольку это единственная таблица, вызывающая проблему, я предполагаю, что BLOB как-то связаны с ней (даже если они не выбираются и не объединяются). Обратите внимание, что количество строк в этой таблице не особенно велико по сравнению с другими объединенными таблицами.

Как я могу ускорить этот запрос?

РЕДАКТИРОВАТЬ - вот запрос (проблемная таблица "представления"):

SELECT
 actions.id,
 actions.facebook_id,
 actions.created_at,
 actions.current_total_points,
 actions.current_weekly_points,
 submissions.id AS submission_id,
 submissions.challenge_week_number AS submission_challenge_week_number,
 submissions.challenge_number_in_week AS submission_challenge_number_in_week,
 reward_events.id AS reward_event_id,
 reward_events.reward_event_type_id,
 reward_events.action_id,
 reward_events.awarded_badge_type_id,
 reward_events.for_week_number AS reward_event_for_week_number,
 reward_events.challenge_number_in_week AS reward_event_challenge_number_in_week,
 challenge_weeks.week_number
from actions
left join submissions ON submissions.action_id = actions.id
left join reward_events ON reward_events.action_id = actions.id
left join challenge_weeks ON challenge_weeks.start_date <= CAST(actions.created_at AS DATE) AND challenge_weeks.end_date >= CAST(actions.created_at AS DATE)
where actions.facebook_id = '12345678'
order by actions.id asc

Вот результат EXPLAIN для таблицы «submissions»:

id                        bigint(11) unsigned           NO  PRI  auto_increment
action_id                 bigint(11)                    NO
title                     varchar(255)                  YES
description               varchar(255)                  YES
submission_type           enum('alpha','beta','gamma')  YES
filename                  varchar(255)                  YES
ip_address                varchar(255)                  YES
community_release         bit(1)                        YES
approved                  bit(1)                        YES
fullsize                  longblob                      YES
thumb                     longblob                      YES
modified_at               timestamp                     YES  CURRENT_TIMESTAMP  
challenge_week_number     tinyint(1)                    YES
challenge_number_in_week  tinyint(1)                    YES

person Brian D'Astous    schedule 01.11.2010    source источник
comment
Не могли бы вы опубликовать запрос? Всегда легче оптимизировать запрос, когда вы его видите.   -  person Quassnoi    schedule 01.11.2010
comment
Также очень поможет публикация вывода EXPLAIN и структур задействованных таблиц.   -  person Mchl    schedule 01.11.2010


Ответы (1)


Пробовали ли вы создавать индексы для полей, не являющихся PK, к которым вы присоединяетесь, например submissions.action_id и reward_events.action_id? Это должно привести к сокращению времени запроса пропорционально размеру таблиц, к которым вы присоединяетесь.

person justinbach    schedule 02.11.2010