Holen Sie sich die Top 20. Wenn sie die Anforderungen nicht erfüllen, führen Sie eine zusätzliche Abfrage durch, um die fehlenden Teile zu erhalten. Sie sollten in der Lage sein, ein gewisses Gleichgewicht zwischen der Anzahl der Abfragen und der Anzahl der jeweils zurückgegebenen Zeilen zu finden.
Wenn Sie die Top 100 haben, erfüllt es möglicherweise die Anforderungen in 90 % der Fälle und wäre billiger und schneller als 10 separate Abfragen.
Wenn es SQL Server wäre, könnte ich mehr helfen...
Eigentlich habe ich eine andere Idee. Führen Sie alle 5 Minuten einen Prozess aus, der die Liste berechnet und in einer Tabelle zwischenspeichert. Machen Sie DML gegen verwandte Tabellen, um den Cache ungültig zu machen, sodass er nicht verwendet wird, bis er neu gefüllt wird (möglicherweise wurde ein Artikel gelöscht). Wenn der Cache ungültig ist, würden Sie auf die spontane Berechnung zurückgreifen ... und könnten das trotzdem verwenden, um den Cache neu zu füllen.
Es ist möglicherweise möglich, die zwischengespeicherte Liste strategisch zu aktualisieren, anstatt sie neu zu berechnen. Aber das könnte eine echte Herausforderung werden.
Dies sollte sowohl bei der Abfragegeschwindigkeit als auch bei der Verringerung der Belastung Ihrer Datenbank helfen. Es sollte nicht viel ausmachen, wenn Ihre Artikelliste 5 Minuten veraltet ist. Verdammt, sogar 1 Minute könnte funktionieren.