0

しばらくの間、次のクエリを使用してきましたが、結果データベースが大きくなるにつれて、使用できなくなるほど遅くなりました。誰かがこれを行う別の方法を提案できますか?

c.name と r.scope にフルテキスト インデックスがあります

SELECT * FROM results r 
        INNER JOIN categories c on r.id = c.result_id 
        INNER JOIN tags t on r.id = t.result_id 
        WHERE c.name in ('purchase', 'single_family', 'other')

        AND ( r.scope = 'all' OR r.scope = 'hi' )
        AND published = 1
    GROUP BY r.id
        HAVING COUNT(c.c_id) >= 3
        ORDER BY r.usefulness DESC
        LIMIT 8 OFFSET 0

どんな助けでも大歓迎です。ありがとう!

編集:EXPLAINの結果は次のとおりです

  id    select_type     table   type    possible_keys   key     key_len     ref     rows    Extra
1   SIMPLE  c   range   nameindex,name  nameindex   767     NULL    10036   Using where; Using temporary; Using filesort
1   SIMPLE  t   ALL     NULL    NULL    NULL    NULL    10229   Using where; Using join buffer
1   SIMPLE  r   eq_ref  PRIMARY,scope   PRIMARY     4   rfw.t.result_id     1   Using where
4

4 に答える 4

0

fulltextここではインデックスは必要ありません。通常のインデックスは、mySQL がこのフィールドに使用したいものです。

MATCH .. AGAINSTフルテキスト インデックスは、フルテキスト検索 (クエリ)で使用することを目的としています。IN ()単純な equals またはクエリには関係ありません。

于 2013-04-16T09:52:03.937 に答える
-1

1) 回答欄に必要なもののみを選択します。2) テーブルのインデックスを適切に設定します。また、を使用して情報を取得することもできますEXPLAIN SELECT ...

于 2013-04-16T09:51:27.713 に答える