2015-05-28 69 views
0

我有這個疑問如何優化這一複雜的MySQL查詢

SELECT id, number, count, name FROM temp AS t1 WHERE (SELECT COUNT(*) FROM temp AS t2 WHERE t2.number = t1.number AND t2.count > t1.count ) = 0 AND id NOT IN (SELECT id FROM temp WHERE count < 3)

其目前的時間太長執行,表溫度有150個000行和增加。

我通過php(mysqli)運行這個。我怎樣才能提高性能?

回答

1

在查詢條件

AND id NOT IN (SELECT id FROM temp WHERE count < 3)

可以作爲

and `count` < 3 

您也可以將子查詢與exists策略,最後加入一些指標。 https://dev.mysql.com/doc/refman/5.5/en/subquery-optimization-with-exists.html

select id,number,`count`,name from temp t1 
where t1.`count` < 3 
and not exists(
select 1 from temp t2 
where t2.number = t1.number AND t2.count > t1.count 
) 

索引可能需要如果不是已經存在的

alter table temp add index cnt_idx(`count`); 
alter table temp add index number_idx(`number`); 

確保取表的備份應用索引之前。

您可以隨時使用explain select來檢查查詢健康狀況。