réflexion sur la pagination

Gilles Vincent <[email protected]>
Newsgroups gmane.comp.web.spip.devel
Message-ID <CA+Q4CmsZ6-8GwhpDn6Gqon7XCcuHsWfdkbkZ2T7kih19nk9utA@mail.gmail.com>
Salut la liste,

le mécanisme de pagination automatique dans SPIP est cool,.. mais loin
d'être optimal.
Sur forum.spip.net, il génère des requêtes qui peuvent prendre plus de 2
secondes !

Voici le type de boucle générée :
http://spip.pastebin.fr/46321

La requête parcourt prêt de 9 millions de lignes via des tables temporaires
sans passer par un index.
Voici le résultat du EXPLAIN :
http://spip.pastebin.fr/46322

Le problème est lié à plusieurs éléments :

- Une combinaison LIMIT + ORDER BY
- Un LIMIT important dans des boucles en UNION
- Un tri sur un champ calculé

Pour résoudre cela, je vois plusieurs approches :
- revoir la navigation pour avoir moins d'accès directs (voire enlever les
accès directs et utiliser un chargement progressif)
- mettre en cache des résultats intermédiaires avant de les trier (pour
pouvoir les utiliser à plusieurs niveaux de pagination)

Je n'invente rien, je m'inspire d'exposés trouvés sur slideshare :
http://fr.slideshare.net/MarkusWinand/backend-to-frontend-when-database-optimization-affects-the-full-stack

Est-ce que ça vous semble pertinent de travailler sur un tel chantier ?
Perso, avec un accès aux forums, j'ai un bel espace de travail ;-)

.Gilles
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.