使用这些MySQL表优化查询

时间:2010-06-27 04:53:59

标签: mysql optimization

我需要一些帮助优化2个表的查询。一个将包含大约一百万,另一个将包含大约1000万行。

这是表结构 -

Table Structure

Sample Browse and Search Queries

这些查询需要很长时间,大约15-20秒,在某些情况下需要超过一分钟

所以,请看看并建议我如何让它们更快地用于实际用途。

P.S。以下是这两个示例搜索和浏览查询的查询计划...

Explain: search query

Explain: Browse query

1 个答案:

答案 0 :(得分:1)

您可能希望将索引放在要过滤的字段上,例如category_id,site_enabled和video_collection date。

通常,对于那个大小的表,目标是尽可能减少需要连接的行数。

对于你的浏览查询,我只能想象它是如此慢,如果它试图加入所有行,然后将结果过滤到20。你可能会尝试重写它以使用前20位的嵌套选择最喜欢的视频。类似的东西:

select 
v.video_id,
v.video_title,
v.video_link,
v.video_total_view,
v.video_likes_count,
v.video_collection_date as date,
v.video_time,
s.site_name

from 
(select 
video_id,
v.video_title,
v.video_link,
v.video_total_view,
v.video_likes_count,
v.video_collection_date as date,
v.video_time
from icumm_videos 
where category_id='1'
and 1277612659 - v.video_collection_date < 86400 * 7
order by video_likes_count desc limit 0,20) v
inner join icumm_sites s on v.site_id = s.site_id and site_enabled>0
left outer join icumm_featured_videos fv on v.video_id = fv.video_id

我无法看到您的查询在哪里使用了精选视频表中的任何内容,因此加入可能是多余的。

相关问题