2014-03-03 90 views
0

我使用MySQL作爲數據庫,併爲了展示一些東西在接口I必須執行這樣的查詢MySQL的:試圖加快查詢

select site_id 
from dim_site join 
    dim_site_cat 
    using(site_id) 
where cat_id=8724 
order by update_cat_ids_ts desc 
limit 100; 

在dim_site我有6.5 M行,其中有1.5具有CAT_ID = 8724。 dim_site_cat是多對多表。我有update_cat_ids_ts上的索引,但它不起作用。現在這樣的查詢由於filesort而工作時間過長(8.5 s),是否有機會加速它?

回答

0

你似乎並不需要dim_site表,如果我理解正確,其中列來(你應該總是使用表的別名):

select site_id 
from dim_site_cat 
where cat_id = 8724 
order by update_cat_ids_ts desc 
limit 100; 

這可以用一個綜合指數來加速:dim_site_cat(cat_id, update_cat_ids_ts, site_id)

編輯:

看,你應該使用表別名。或許,這將幫助:

select site_id 
from dim_site s 
where exists (select 1 
       from dim_site_cat sc 
       where sc.site_id = s.site_id and sc.cat_id = 8724 
      ) 
order by s.update_cat_ids_ts desc 
limit 100; 

對於此查詢,創建以下兩個指標:dim_site_cat(site_id, cat_id)dim_site(update_cat_ids_ts, site_id)。但是,您需要爲order by訂購非常大的結果集。可能很難獲得好的表現。

+0

dim_site_cat只有2個字段:site_id和cat_id。鏈接網站和貓。 update_cat_ids_ts是站點特徵 –

+0

如果我們有這樣的cat_id有1.5個值,但是如果我們沒有這樣的cat_id值,它的工作時間就會變得更長。我嘗試爲兩個變體都正常工作 –

+0

您是否提到了索引?我不明白爲什麼它會減少記錄的速度。 –