Autant que je sache, la meilleure façon de faire une requête comme celle-ci "rapide comme l'éclair", est de créer un tableau récapitulatif qui suit les vues de page d'amis par page et par créateur.
Vous voudriez probablement le tenir à jour avec les déclencheurs. Ensuite, votre agrégation est déjà faite pour vous, et c'est une simple requête pour obtenir les pages les plus consultées. Vous pouvez vous assurer que vous disposez des index appropriés sur le tableau récapitulatif, de sorte que la base de données n'ait même pas besoin de trier pour obtenir le plus consulté.
Les tables récapitulatives sont la clé du maintien de bonnes performances pour les requêtes de type agrégation dans les environnements principalement en lecture. Vous effectuez le travail en amont, lorsque les mises à jour se produisent (peu fréquentes), puis les requêtes (fréquentes) n'ont rien à faire.
Si vos statistiques n'ont pas besoin d'être parfaites et que vos écritures sont en fait assez fréquentes (ce qui est probablement le cas pour quelque chose comme les pages vues), vous pouvez regrouper les vues en mémoire et les traiter en arrière-plan, afin que les amis ne n'ont pas à se soucier de tenir à jour le tableau récapitulatif pendant qu'ils consultent les pages. Cette solution réduit également les conflits sur la base de données (moins de processus mettant à jour le tableau récapitulatif).