Získejte 20 nejlepších. Pokud nesplňují požadavky, proveďte další dotaz, abyste získali chybějící kusy. Měli byste být schopni najít určitou rovnováhu mezi počtem dotazů a počtem řádků, které každý vrátí.
Pokud máte 100 nejlepších, mohlo by to splňovat požadavky v 90 % případů a bylo by to levnější a rychlejší než 10 samostatných dotazů.
Kdyby to byl SQL Server, mohl bych pomoci více...
Vlastně mám jiný nápad. Každých 5 minut spusťte proces, který vypočítá seznam a uloží jej do mezipaměti v tabulce. Provedením DML proti souvisejícím tabulkám zrušíte platnost mezipaměti, takže nebude použita, dokud nebude znovu naplněna (možná byl smazán článek). Pokud je mezipaměť neplatná, vrátíte se k jejímu výpočtu za běhu... A stejně byste to mohli použít k opětovnému naplnění mezipaměti.
Může být možné strategicky aktualizovat seznam uložený v mezipaměti spíše než jej přepočítávat. Ale to by mohla být skutečná výzva.
To by mělo pomoci s rychlostí dotazů a snížením zatížení vaší databáze. Pokud je váš seznam článků 5 minut zastaralý, nemělo by příliš záležet. Sakra, může fungovat i 1 minuta.