1
我有以下MySQL表字段:如何優化MySQL查詢以在三個字段中查找子字符串?
description1
,description2
,description3
: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
字段已被編入索引)。
非常感謝。我做了三個描述字段的全文索引。但現在查詢:「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
/*前*/\t ALTER TABLE'table' ADD FULLTEXT( 'description1', 'description2', 'description3' ); /*之後*/ WHERE MATCH(description1,description2,description1)AGAINST('string') – cetver 2011-06-02 19:50:45
是的,這就是我所做的。儘管結果並不總是完全包含「字符串」。如果我的字符串有三個單詞,結果有時候有三個單詞中的兩個,等等。有沒有一種方法可以完全匹配子字符串? – tucson 2011-06-03 06:09:10