2011-06-02 31 views
1

我有以下MySQL表字段:如何優化MySQL查詢以在三個字段中查找子字符串?

description1description2description3:VARCHAR(500)

value:整數

,並希望找到記錄中,其中描述的至少一個包括string被用戶搜索。 現在我正在使用以下查詢。它有效,但返回結果大約需要1.5秒。

SELECT `table`.`value`, 
     `table`.`description1`, 
     `table`.`description2`, 
     `table`.`description3` 
     FROM `table` 
WHERE (`table`.`description1` LIKE '%string%' 
OR `table`.`description2` LIKE '%string%' 
OR `table`.`description3` LIKE '%string%') 
ORDER BY `table`.`value` DESC LIMIT 0 , 9 

有沒有什麼辦法讓結果更快?

(請注意,value字段已被編入索引)。

回答

1

添加全文索引,而不喜歡使用反對

+0

非常感謝。我做了三個描述字段的全文索引。但現在查詢:「SELECT'table'.'value','table'.'description1','table'.'description2','table'.'description3' FROM'table' WHERE(MATCH('description1' ('string')或MATCH('description2')AGAINST('string')或MATCH('description3')AGAINST('string'))ORDER BY'table'.'value' DESC LIMIT 0,9「,我得到完全不同的結果比我原來的查詢。 – tucson 2011-06-02 17:45:43

+0

/*前*/\t ALTER TABLE'table' ADD FULLTEXT( 'description1', 'description2', 'description3' ); /*之後*/ WHERE MATCH(description1,description2,description1)AGAINST('string') – cetver 2011-06-02 19:50:45

+0

是的,這就是我所做的。儘管結果並不總是完全包含「字符串」。如果我的字符串有三個單詞,結果有時候有三個單詞中的兩個,等等。有沒有一種方法可以完全匹配子字符串? – tucson 2011-06-03 06:09:10