我需要一些帮助优化2个表的查询。一个将包含大约一百万,另一个将包含大约1000万行。
这是表结构 -
Sample Browse and Search Queries
这些查询需要很长时间,大约15-20秒,在某些情况下需要超过一分钟
所以,请看看并建议我如何让它们更快地用于实际用途。
P.S。以下是这两个示例搜索和浏览查询的查询计划...
答案 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
我无法看到您的查询在哪里使用了精选视频表中的任何内容,因此加入可能是多余的。