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