2010-11-01 425 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?这应该会导致查询时间与您加入的表的大小成比例下降。

相关问题