2016-07-26 44 views
-2

我試圖做一個非常快速的&有效的方法來獲取記錄使用關鍵字作爲搜索。LIKE%或AGAINST用於FULLTEXT搜索?

我們的MYSQL表MASTER tablescontains 30,000行,有4個字段。

  • ID
  • 標題(FULLTEXT
  • short_descr(FULLTEXT
  • long_descr(FULLTEXT

任一項能否提供它是一個更有效?

  • LIKE%
  • MySQL的反對

這將是很好,如果有一個人可以寫一個SQL查詢的關鍵字 減肥祕笈

SELECT id FROM MASTER 
WHERE (title LIKE '%Weight Loss Secrets%' OR 
     short_descr LIKE '%Weight Loss Secrets%' OR 
     long_descr LIKE '%Weight Loss Secrets%') 

非常感謝e

+1

全文索引應該更快。 –

+0

「LIKE OR LIKE OR LIKE」會讓您的服務器着火。 – Piskvor

+0

兩者都有不同的用途。 'AGAINST'返回一個可用於根據相關性對結果進行排序的數字,匹配時單詞的順序無關緊要。 「LIKE」執行完全匹配,並且沒有相關性分數。更快是無關緊要的。 –

回答

1

FULLTEXT索引應該更快,也許它是一個好主意,將所有列添加到1全文索引。

ALTER TABLE MASTER 
ADD FULLTEXT INDEX `FullTextSearch` 
(`title` ASC, `short_descr` ASC, `long_descr` ASC); 

然後執行使用IN BOOLEAN MODE

SELECT id FROM MASTER WHERE 
MATCH (title, short_descr, long_descr) 
AGAINST ('+Weight +Loss +Secrets' IN BOOLEAN MODE); 

這就會發現,包含所有3個關鍵字行。

但是,這不會給你完全匹配的關鍵字只需要在同一行中存在。

如果你也想要精確匹配,你可以這樣做,但它有點不好,只有當你的表沒有變大時纔會工作。

SELECT id FROM 
(
SELECT CONCAT(title,' ',short_descr,' ', long_descr) AS SearchField 
FROM MASTER WHERE 
MATCH (title, short_descr, long_descr) 
AGAINST ('+Weight +Loss +Secrets' IN BOOLEAN MODE) 
) result WHERE SearchField LIKE '%Weight Loss Secrets%'