2012-04-15 19 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件のレコードがやったされることを意味しますが、それは約25秒の時間を要する15000ですクエリ。私はPDOを使用しています。

+2

特殊な全文検索エンジンはどうですか?スフィンクス、例えば。 –

+2

クエリを正しくフォーマットしてください。長い水平スクロールがあります。 – Lion

+0

索引でテーブル構造を特に指定してください。btw SELECT *は決して良い考えではありません! – worenga

答えて

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) 
関連する問題