J'ai implémenté un système d'analyse qui fonctionne très mal. Pour l'expliquer, je dois expliquer la structure de table requêtesOptimisation SQL Query For Analytics
J'ai deux tables InnoDB
Tableau 1: contient des enregistrements sur les statistiques (toutes les heures stats_id, file_id, temps): Contient Tableau2 plus de 8 millions de lignes.
Tableau 2 Structure est
full_stats (
stats_id Int
file_id Int
stats_week Int
stats_month Int
stats_year Int
stats_time DATETIME
)
Ce que je suis en train de faire est de calculer les vues au total de hourly_stats pour une période de temps donnée et les dossiers de regroupement par file_id puis-je ajouter/mettre à jour les enregistrements vers la table full_stats. Sur moy, cela prend 1-2 minutes pour traiter une ligne. J'essaie d'optimiser les requêtes pour de meilleures performances.
Voici ce que je fais
Il y a 60 chances% que file_id existe déjà dans full_stats pour une semaine donnée, le mois et l'année et 40% les chances sont qu'il n'existe pas.
donc dans la première requête, j'essaie de mettre à jour enregistrement à l'aide suite à la requête
UPDATE full_stats
SET total_views=XXX
WHERE stats_week=XX stats_month=X
AND stats_year=YYYY
après que je vérifie si les lignes affectées est zéro, alors j'insérer l'enregistrement. Une fois l'insertion ou la mise à jour terminée, l'enregistrement de hourly_stats est supprimé en fonction de file_id et de la période donnée.
Pouvez-vous me suggérer comment optimiser les requêtes et réduire le taux de verrouillage?
Quel type d'index avez-vous mis en place sur cette table? – FrustratedWithFormsDesigner
Utiliser SSD joint dans la matrice RAID, devrait accélérer les E/S. Sérieusement? Tant que les index sont ajoutés, il devrait fonctionner aussi vite que possible. Toute optimisation ferait peu de performance dans ce cas. Peut-être que vous envisagez une refonte totale du système, mais aucun indice ne peut être donné ici, parce que si vous poussez dans un endroit, vous perdez dans un autre, et trop peu de détails sont donnés pour savoir ce qui peut être mieux fait. – AlexanderMP
J'ai essayé d'ajouter un index à la semaine, au mois et à l'année, mais la performance était extrêmement lente et j'ai dû l'enlever. – Maximus