2011-11-13 100 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

你*可以*,是的...但它可能不會按照你想要的方式做它想要的。你真正想要在這裏完成的是什麼,你需要問自己的問題 - 很可能你可以添加一個額外的(可索引)列到你的表來代表你想要搜索的東西。 –