2011-10-01 184 views
1

我有這個疑問如何優化這個mysql查詢?

SELECT id FROM btn 
WHERE parentid =0 
AND (mem_id =ANY(SELECT mem_id FROM network WHERE frd_id='401') || mem_id ='401') 
ORDER BY btn.date DESC LIMIT 0,20 

&此查詢

SELECT mem_id FROM net WHERE frd_id='401' 

給我造成這樣

mem_id 
34 
45 
633 
24 
22 

我希望優化其目前正在46秒後上述主查詢掃描13,373條記錄btn

請問我可以優化這個查詢嗎?

thnks

+0

我們不能真正幫助不知道你的索引數據庫結構。 – Bojangles

+3

你有沒有任何索引?如果是,在哪裏?什麼是'EXPLAIN'顯示? – Shef

+0

'現場\t類型\t空\t重點\t默認\t額外 ID \t BIGINT(20)\t NO \t PRI \t(NULL)\t auto_increment' – Sparkx

回答

0
SELECT DISTINCT b.id FROM btn b 
INNER JOIN network n ON (n.mem_id = b.mem_id) 
WHERE b.parentid = '0' 
AND ('401' IN (n.frd_id, n.mem_id)) 
ORDER BY b.date DESC 
LIMIT 20 OFFSET 0 

確保對

btn.mem_id, btn.parentid, btn.date 
network.mem_id, network.frd_id 
+0

它給人重複的結果 – Sparkx

1

您將要索引您搜索的值。因此,基於上述兩個:

parentid, frd_id, mem_id 

這應該大大幫助...