2011-12-16 48 views
0

我一直在試圖調試我的搜索MYSQL的搜索速度,他們是可怕的(幾秒鐘到2分鐘)。mysql:當條件搜索+更多時如何優化這個?

這是搜索的示例代碼。根據用戶需求,搜索複雜性可能變得非常複雜。

SELECT Device,Input,`W(m)`,`L(m)`,VDD,`Temp(C)`,Param,Value 
FROM `TABLE_NAME` 
WHERE (`Temp(C)`='110' OR `Temp(C)`='125') 
    AND (Device='ngear') 
    AND (Input='a' OR Input='b' OR Input='a' OR Input='b' OR Input='c' OR Input='b') 
    AND (Param='speed' OR Param='leakage') 

請注意此表沒有索引,也沒有主鍵。這些數據不是真正的關係數據,因爲它包含存儲在MYSQL中的統計模擬數據。這張表有大約100萬行數據。

我應該開始索引每列嗎?任何想法將不勝感激。

id select_type  table type possible_keys key  key_len  ref  rows Extra 
1 SIMPLE TABLE_NAME ALL  NULL NULL NULL NULL 12278640 Using where 
+0

嗨艾德里安,你可以更新你的消息使用表名'TABLE_NAME'? – Gordon 2011-12-16 12:55:46

回答

0

你需要一個綜合指數,妥善需要你的數據類型的一些重新定義,
這裏是一些一般性的建議:

alter table MQUAL__TSMC_20G_v0d1_Robert_02122011 
add index (`Temp(C)`, Device, Input, Param); 

而且你的查詢可以改變: -

where `Temp(C)` in(110, 125) 
AND Device='ngear' 
AND Input in('a','b','c') 
AND Param in('speed', 'leakage'); 

由於缺少您的模式信息,因此,數據類型應爲: -

`Temp(C)` <-- int 
0

我的建議是用'where'子句添加一個索引,以最大限度地縮小數據。因爲猜測溫度應該是索引中的第一列。你也需要一個複合索引。列的一般規則應從將最多結果減至最後一個最常用值的列開始。