クエリに結合があり、2つのインデックスを使用しているように見えるため、より複雑になります。私はこれを改善することができるかどうか分からないが、私は頼むと思った。私は正しいインデックスを持っているのか、MySQLのクエリの速度を上げることができないのか分かりません。
クエリは、クエリされているレコードと同様のキーワードを持つレコードのリストを生成します。
ここに私の質問です。
SELECT match_keywords.padid,
COUNT(match_keywords.word) AS matching_words
FROM keywords current_program_keywords
INNER JOIN keywords match_keywords
ON match_keywords.word = current_program_keywords.word
WHERE match_keywords.word IS NOT NULL
AND current_program_keywords.padid = 25695
GROUP BY match_keywords.padid
ORDER BY matching_words DESC
LIMIT 0, 11
WordはVARCHAR(40)で説明しています。あなたは、次のフィールド(該当するものを表にチェック)
が
をインデックスmatch_keyword.padidすべき
明確化:あなたが似て言うが、あなたのクエリで使用すると、match_keywords.word = current_program_keywords.word' ON '使用は、両方の単語が同じであることを意味します。レコード#の25695.word = 'aaa'さて、もし、クエリが単語=' aaa' ... GROUP BYとORDER BYはどんな意味がありませんを持っている 'N'行を返します。 'n'はあなたが興味を持っている唯一の変数ですか? –
同様、年のそれは、できるだけ多くの単語と一致し、最もマッチの数を提供して、その上でソートすると、最も類似したレコードを提供します。 – Jules