2010-06-27 75 views
4

我需要一些帮助优化2个表上的查询。一个将包含约一百万,另一个将包含约一千万行。使用这些MySQL表优化查询

这里是表结构 -

Table Structure

Sample Browse and Search Queries

这些查询过​​了一分钟

所以需要很长的时间,大约15至20秒,在某些情况下, ,请看看并建议我如何使它们在实际使用中更快。

P.S.这里是为那些2示例搜索查询计划和浏览查询...

Explain: search query

Explain: Browse query

回答

1

你可能想要把对字段的索引你筛选,喜欢CATEGORY_ID,site_enabled,和video_collection日期。

一般来说,使用这种大小的表格,目标是尽可能减少需要连接的行数。

对于您的浏览查询,我只能想象如果它试图加入所有行,然后将结果过滤为20,那么速度会很慢。您可能会尝试重新编写它以在顶部使用嵌套选择20个最喜欢的vids。例如:

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 

我看不到您的查询在使用精选视频表中的任何内容,因此联接可能是多余的。

+0

Hi Rob!这改进了浏览查询,但我仍然坚持搜索查询,查找2个大表中的2列中的文本。有任何帮助吗?谢谢,Anjan – anjan 2010-06-27 07:32:22

+0

我会尝试相同的方法进行搜索查询 - 只需将匹配条件放入嵌套的SELECT – 2010-06-27 09:47:56

+0

Hi Rob!您的建议确实有助于查询。但是我发现,一旦行数超过一百万,mysql全文搜索可能需要更长的时间。所以,我已经去了狮身人面像寻找。谢谢,安键 – anjan 2010-06-28 07:00:40