Soweit ich weiß, besteht der beste Weg, eine solche Abfrage "blitzschnell" zu erstellen, darin, eine zusammenfassende Tabelle zu erstellen, die die Seitenaufrufe von Freunden pro Seite und Ersteller verfolgt.
Sie möchten es wahrscheinlich mit Triggern auf dem neuesten Stand halten. Dann ist Ihre Aggregation bereits für Sie erledigt, und es ist eine einfache Abfrage, um die meistgesehenen Seiten zu erhalten. Sie können sicherstellen, dass Sie die richtigen Indizes für die Übersichtstabelle haben, sodass die Datenbank nicht einmal sortieren muss, um die meistgesehenen zu erhalten.
Zusammenfassungstabellen sind der Schlüssel zur Aufrechterhaltung einer guten Leistung für Abfragen vom Aggregationstyp in Umgebungen mit überwiegendem Lesezugriff. Sie erledigen die Arbeit im Voraus, wenn die Aktualisierungen erfolgen (selten) und dann müssen die Abfragen (häufig) keine Arbeit leisten.
Wenn Ihre Statistiken nicht perfekt sein müssen und Ihre Schreibvorgänge ziemlich häufig sind (was wahrscheinlich bei Seitenaufrufen der Fall ist), können Sie Aufrufe im Speicher stapeln und im Hintergrund verarbeiten, damit die Freunde nicht Sie müssen sich nicht die Mühe machen, die Zusammenfassungstabelle auf dem neuesten Stand zu halten, während sie Seiten anzeigen. Diese Lösung reduziert auch Konflikte in der Datenbank (weniger Prozesse aktualisieren die Übersichtstabelle).