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を使用しています。

4

1 に答える 1

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)
于 2012-04-15T18:54:09.970 に答える