2012-04-15 56 views
1

我使用這個查詢但不幸的是它慢騰騰很慢:全文:此查詢

SELECT *, 
    (MATCH(`title`) AGAINST ('$word' IN BOOLEAN MODE) * 2 
    + MATCH(`content`) AGAINST ('$word' IN BOOLEAN MODE) * 2 
    + MATCH(`url`) AGAINST ('$word' IN BOOLEAN MODE) * 1.1 
    + MATCH(`desc`) AGAINST ('$word' IN BOOLEAN MODE) * 1.2) * `like` 
    AS score 
FROM `data` 
WHERE MATCH(`content`,`desc`,`title`,`url`) AGAINST ('$word' IN BOOLEAN MODE) 
ORDER BY `score` DESC LIMIT 1000 

數據庫的結果是15000。這意味着15000點的記錄將被做了,但它需要大約25秒時間查詢。我正在使用PDO。

+2

那麼專業的全文搜索引擎呢?例如,獅身人面像。 – 2012-04-15 18:26:56

+2

請格式化您的查詢。有一個很長的水平滾動。 – Lion 2012-04-15 18:27:10

+0

請提供表結構especially與索引,btw SELECT *從來不是一個好主意! – worenga 2012-04-15 18:36:36

回答

0

您將需要FULLTEXT索引,否則DBMS將需要每次搜索整個表。這確實會減慢記錄的插入。請注意,在4列上的全文搜索總是比較慢。

CREATE FULLTEXT INDEX indexTitle ON `data` (title) 
CREATE FULLTEXT INDEX indexContent ON `data` (content) 
CREATE FULLTEXT INDEX indexURL ON `data` (url) 
CREATE FULLTEXT INDEX indexDesc ON `data` (desc) 
CREATE FULLTEXT INDEX combinedIndex ON `data` (content, desc, title, url)