トップ20を取得します。要件を満たしていない場合は、追加のクエリを実行して不足している部分を取得します。クエリの数とそれぞれが返す行の数のバランスをとることができるはずです。
私はあなたがトップ100を獲得しました。それは、90%の確率で要件を満たし、10の個別のクエリよりも安くて速いでしょう。
SQL Serverの場合は、さらに支援できます...
実際、私には別の考えがあります。リストを計算してテーブルにキャッシュするプロセスを5分ごとに実行します。関連するテーブルに対してDMLを作成すると、キャッシュが無効になり、再入力されるまで使用されなくなります(記事が削除された可能性があります)。キャッシュが無効な場合は、その場で計算することにフォールバックします...そしてそれを使用してキャッシュを再作成することができます。
キャッシュされたリストを再計算するのではなく、戦略的に更新できる可能性があります。しかし、それは本当の挑戦かもしれません。
これは、クエリの速度とデータベースの負荷の軽減の両方に役立つはずです。記事リストが5分古くなっていても、それほど重要ではありません。なんと、1分でもうまくいくかもしれません。