2011-11-13 104 views
0

我得到相当缓慢的性能是一个非常简单的语句(3-4秒):我应该使用什么指数?

SELECT col1,col2,col3 FROM table WHERE fname LIKE '%D%' OR fname LIKE '%S%' ORDER BY DATE(bday) DESC LIMIT 0,100 

我有指数FNAME,另一对BDAY和FNAME & BDAY甚至是联合索引。这里是我的解释:

id select_type table type possible_keys key key_len ref rows Extra 

1 SIMPLE  table ALL NULL   NULL NULL  NULL 95856 Using where; Using filesort 
+2

没有索引将在这里帮助。我会寻找一个全文搜索解决方案。 MySQL有内置的内容:http://dev.mysql.com/doc/refman/5.0/en/fulltext-search.html –

+0

@Wiseguy:你为什么删除你的答案?这是一个有效的(可能是最简单的帮助查询可以得到)。 –

+0

'order by'是次要的,但是,仍然是一个问题。在一个足够小的集合上它不会很糟糕,但实际上它应该首先作为日期类型存储。 –

回答

0

如前所述,没有任何指标将有所帮助。就我个人而言,我认为全文搜索过度杀伤这个并添加其他列到表中,插入更新并索引它。

像是为了一个。

4

没有索引会帮助你在这里。

当你使用LIKE '%something%它将不得不看每一行并进行字符串匹配。

+0

有没有其他方法可以使用?全文? –

+0

你*可以*,是的...但它可能不会按照你想要的方式做它想要的。你真正想要在这里完成的是什么,你需要问自己的问题 - 很可能你可以添加一个额外的(可索引)列到你的表来代表你想要搜索的东西。 –