Je dispose d'une table MySQL pour stocker les statistiques des utilisateurs avec >2MM lignes et 8 colonnes et un index sur l'ID utilisateur. Lorsque l'utilisateur visite son profil, beaucoup de ces informations sont récupérées de la base de données, entraînant - dans le pire des cas - une douzaine de requêtes SELECT
parfois jointes à d'autres tables. C'est similaire au profil sur SO qui doit aussi extraire beaucoup de données.
Certaines requêtes, comme celles pour obtenir le score de l'utilisateur, nécessitent un COUNT
et d'autres fonctions MySQL consommatrices de performances. Ainsi, rien que les requêtes pour la page de profil peuvent prendre jusqu'à 10-20 secondes.
Maintenant mes questions :
- Comment un site web comme SO parvient-il à extraire autant d'informations aussi rapidement ?
- Dois-je mettre en place une couche de mise en cache ?
- Devrais-je précalculer le nombre de points, etc. qui consomment les performances de MySQL ?
- Devrais-je utiliser une table optimisée pour l'écriture et une autre pour la lecture ? Si oui, comment pourrais-je récupérer des données en temps réel comme sur SO ?
- Devrais-je passer à un autre système que MySQL ?