Problème de bdd simple mais pas évident à trouver

Problème de bdd simple mais pas évident à trouver - SQL/NoSQL - Programmation

Marsh Posté le 28-10-2010 à 17:08:35    

Bonjour à tous,
 
J'ai un problème qui est je le pense assez simple pour une personne relativement expérimentée mais qui est difficile à retrouver dans les archives du site, car pas évident à mettre sous forme de mots-clés
 
J'ai deux tables, dans la première je voudrai qu'une colonne soit la somme des lignes d'une colonne de la seconde table. Je souhaiterai que la colonne de total de la première table soit mise à jour à chaque fois que j'ajoute une nouvelle entrée à la colonne de la seconde table.
 
Une question subsidiaire: si je fais la somme sans passé par une table de total, cad au moment de faire le SELECT, cela ne va t'il pas prendre beaucoup de temps? Je vais en effet avoir des centaines/milliers de lignes à additionner à chaque fois.
 
Par avance merci
Cynth

Reply

Marsh Posté le 28-10-2010 à 17:08:35   

Reply

Marsh Posté le 28-10-2010 à 20:07:48    

Salut,
Je dirais qu'à moins d'être dans certains cas extrêmement spéciaux, il ne faudra pas faire ce que tu cherches à faire.  
 
Mets un index sur ta colonne et fait ton select Count dessus. T'auras pas de soucis.


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
Reply

Marsh Posté le 29-10-2010 à 08:12:54    

Un index ne va pas vraiment aider si c'est un total et pas un count qu'il faut faire (mais ca peu reduire la quantité de données lue).
 
Mais le fait que c'est une "mauvaise" idée reste vrai dans le sens ou tu dénormalises ta DB.
 
Si tu n'as besoin du total que quelques fois par jour c'est tout a fait acceptable de calculer a la volée (ici le total sur un million de lignes prends 250ms).
Si c'est quelque chose qui tourne en permanence et qu'il te faut un temps de reponse super bas alors que tu as plusieurs millions de lignes tu as deux choix.
 
Si tu fais peu d'insert ou d'update tu peu utiliser un trigger qui va se declencher a chaque insert/update, ce n'est pas vraiment recommandé car au final ca te fera perdre plus de temps a chaque insert/update que pour un select.
 
L'autre solution c'est d'utiliser des resultats intermediaire, si tu fais tres peu d'update et beaucoup d'insert et que tu as le moyen de definir une sequence (une date par exemple) tu peu recalculer le total une fois par jour et additioner ce total a la somme des valeurs d'aujourd'hui.

Reply

Marsh Posté le 29-10-2010 à 16:06:12    

Merci beaucoup, je vais suivre la méthode à la volée alors.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed