2010-11-01 94 views
2

我有一個包含大量左連接的MySQL選擇查詢,但只有一個連接導致嚴重的性能問題。這個麻煩的表中有2個BLOB字段,當我在主鍵上加入連接時,查詢需要超過20次才能運行。由於這是造成問題的唯一表格,因此我認爲BLOB與它有關(即使它們未被選中或加入)。請注意,此表中的行數相對於其他連接的表並不特別大。加入包含BLOB的表時,MySQL查詢速度很慢

如何加快此查詢?

編輯 - 這裏是查詢(有問題的表是 「意見書」):

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結果:

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 
+2

請問您可以發表查詢嗎?在查看時優化查詢總是更容易。 – Quassnoi 2010-11-01 14:21:18

+1

同時發佈EXPLAIN的輸出和涉及的表格結構將有所幫助 – Mchl 2010-11-01 14:22:30

回答

1

您是否嘗試過創建您要加入的非PK字段的索引,如submissions.action_idreward_events.action_id?這應該會導致查詢時間與您加入的表的大小成比例下降。