Вземете първите 20. Ако те не отговарят на изискванията, направете допълнителна заявка, за да получите липсващите парчета. Трябва да сте в състояние да постигнете някакъв баланс между броя на заявките и броя на връщаните редове.
Ако сте получили първите 100, това може да удовлетвори изискванията в 90% от времето и би било по-евтино и по-бързо от 10 отделни заявки.
Ако беше SQL Server, можех да помогна повече...
Всъщност имам друга идея. Стартирайте процес на всеки 5 минути, който изчислява списъка и го кешира в таблица. Направете DML срещу свързани таблици да обезсили кеша, така че да не се използва, докато не бъде повторно попълнен (може би дадена статия е била изтрита). Ако кешът е невалиден, ще се върнете към изчисляването му в движение... И така или иначе бихте могли да го използвате за повторно попълване на кеша.
Възможно е да се актуализира стратегически кешираният списък, вместо да се преизчислява. Но това може да бъде истинско предизвикателство.
Това трябва да помогне както за скоростта на заявката, така и за намаляване на натоварването на вашата база данни. Не би трябвало да има голямо значение, ако списъкът ви със статии е остарял с 5 минути. По дяволите, дори 1 минута може да свърши работа.