2011-10-01 127 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 

这应该大大帮助...