可能な限り最適化する必要がある MySQL クエリがあります (可能であれば、読み込み時間を 5 秒未満にする必要があります)。
クエリは次のとおりです。
SELECT domain_id, COUNT(keyword_id) as total_count
FROM tableName
WHERE keyword_id IN (SELECT DISTINCT keyword_id FROM tableName WHERE domain_id = X)
GROUP BY domain_id
ORDER BY total_count DESC
LIMIT ...
- X は入力から得られる整数です
- domain_id と keyword_id がインデックス化されています
- データベースはローカルホスト上にあるため、ネットワーク速度は最大にする必要があります
WHERE 句からのサブクエリは、最大 1,000 万件の結果を取得できます。また、MySQL の場合、COUNT と ORDER BY このカウントを計算するのは非常に難しいようです。
このクエリを SOLR と混合しようとしましたが、結果がありません。一度に大量の行を取得すると、MySQL と SOLR の両方に苦労します
別のテクノロジーを使用する必要があるか、この MySQL クエリを改善する必要があるかに関係なく、同じ結果が得られるソリューションを探しています。
ありがとう!
クエリ ロジックは次のとおりです。
ドメインがあり、そのドメインで使用されているすべてのキーワードを検索しています (これがサブクエリです)。次に、最初のクエリで見つかったキーワードの少なくとも 1 つを使用するすべてのドメインをドメインごとにグループ化し、各ドメインで使用されているキーワードの数を使用して、使用されているキーワードの数で DESC 順に並べて表示する必要があります。
これが理にかなっていることを願っています