2010-06-27 53 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