2011-12-16 46 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'子句添加一个索引,以最大限度地缩小数据。因为猜测温度应该是索引中的第一列。你也需要一个复合索引。列的一般规则应从将最多结果减至最后一个最常用值的列开始。