Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1772 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  une grosse table VS plusieurs tables de tailles moyennes ?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

une grosse table VS plusieurs tables de tailles moyennes ?

n°1455411
Djebel1
Nul professionnel
Posté le 11-10-2006 à 13:18:00  profilanswer
 

Bonjour, une question portant sur la meilleure stratégie du point de vue des performances :  
 
J'ai actuellement une table de plusieurs millions de lignes. Un champ de cette table permet de séparer ces données en plusieurs dizaines de catégories. On ne travaille sur les données principalement que par une catégorie à la fois (ou 2 par 2), mais rarement sur l'ensemble des catégories au cours d'une requête.
 
Il y aurait-il un gain de performance à mettre ces données dans des tables distinctes correspondant à chacune des catégories ?
Ca ferait donc quelques dizaines de tables contenant quelques centaines de milliers de lignes, VS une table de plusieurs millions de ligne.
 
Le gain de perf quand je travaillerai sur une seule catégorie vaudra-t-il la perte de perf quand je travaillerai sur l'ensemble des tables (pour travailler sur l'ensemble des catégories) ?
 
Bref, à votre avis, quel est la  meilleure stratégie ?


Message édité par Djebel1 le 11-10-2006 à 13:22:34
mood
Publicité
Posté le 11-10-2006 à 13:18:00  profilanswer
 

n°1455630
orafrance
Posté le 11-10-2006 à 17:03:33  profilanswer
 

oui sauf si tu as des requêtes qui auraient besoin de taper dans plusieurs de ces tables en même temps.  
 
Sinon, le partitionnement est une bonne solution aussi :)

n°1456496
MagicBuzz
Posté le 13-10-2006 à 09:28:15  profilanswer
 

Moi je ne suis pas vraiment de cet avis. Pour moi ça reste à prouver. Si tu as des index correctement placés (notamment portant en premier lieux sur la catégorie, ordonné en cluster), et que tes paramètre de remplissage de la table sont corrects, tu n'auras aucune différence de performances entre une table de plusieurs millions de lignes ou une table de plusieurs centaine de milliers de lignes. Par contre, éviter un UNION ALL sur une centaine de tables, c'est quand même intéressant...

n°1456567
Djebel1
Nul professionnel
Posté le 13-10-2006 à 11:04:52  profilanswer
 

je suis d'accord avec toi MagicBuzz, mais mon collègue qui veut partitionner en plusieurs tables me dit qu'ainsi, l'index n'aura même pas à être intégralement parcouru, ce qui n'est pas faux.
 
D'autres avis ?

n°1456576
anapajari
s/travail/glanding on hfr/gs;
Posté le 13-10-2006 à 11:13:48  profilanswer
 

je pense que orafrance ne parlait pas de "partitionner en plusieurs tables" mais bien de partionner ta table. Et dans ton cas, un partionnement par liste me semble être une très bonne idée.
Tu travailles sur quel sgbd?

n°1456779
MagicBuzz
Posté le 13-10-2006 à 14:06:19  profilanswer
 

Djebel1 a écrit :

je suis d'accord avec toi MagicBuzz, mais mon collègue qui veut partitionner en plusieurs tables me dit qu'ainsi, l'index n'aura même pas à être intégralement parcouru, ce qui n'est pas faux.
 
D'autres avis ?


dans ce cas, tu as deux index.
 
mettons que tu as :
 
id (pk)
categorie
nom
etc...
 
 
tu as un premier index UNIQUE organisé en CLUSTER (car plus souvent utilisé, et permet de partitionner correctement les données) :
ix1 (categorie asc, id asc)
 
et un second index UNIQUE aussi (à compter que l'ID est bel et bien unique quelle que soit la catégorie)
ix2 (id asc)

n°1456792
orafrance
Posté le 13-10-2006 à 14:14:17  profilanswer
 

MagicBuzz a écrit :

Moi je ne suis pas vraiment de cet avis. Pour moi ça reste à prouver. Si tu as des index correctement placés (notamment portant en premier lieux sur la catégorie, ordonné en cluster), et que tes paramètre de remplissage de la table sont corrects, tu n'auras aucune différence de performances entre une table de plusieurs millions de lignes ou une table de plusieurs centaine de milliers de lignes. Par contre, éviter un UNION ALL sur une centaine de tables, c'est quand même intéressant...


 
la taille de l'index peut aussi être problèmatique... donc un index c'est bien mais ça a aussi ses limites :/

n°1456794
orafrance
Posté le 13-10-2006 à 14:15:03  profilanswer
 

anapajari a écrit :

je pense que orafrance ne parlait pas de "partitionner en plusieurs tables" mais bien de partionner ta table. Et dans ton cas, un partionnement par liste me semble être une très bonne idée.
Tu travailles sur quel sgbd?


 
exactement, mais si le partitionnement n'est pas possible, la création de plusieurs tables peut aussi être une solution quand même ;)

n°1456801
MagicBuzz
Posté le 13-10-2006 à 14:18:03  profilanswer
 

orafrance a écrit :

la taille de l'index peut aussi être problèmatique... donc un index c'est bien mais ça a aussi ses limites :/


mouais.
 
m'enfin si le serveur n'arrive pas à se dépatouiller avec deux index uniques qui portent sur 1 et 2 champs, y'a un sérieux problème de perfs quelque-part, et on n'en est plus à se poser la question de tronçonner la table en rondelle (c'est du moins mon avis) ;)
 
sinon, tu parles de "partitionnement". késako ?

n°1456837
anapajari
s/travail/glanding on hfr/gs;
Posté le 13-10-2006 à 14:41:56  profilanswer
 

tiens http://www.phpindex.com/index.php/ [...] ions-mysql c'est pas trop mal expliqué là ( pour mysql mais en gros c'est la même chose sur les autres sgbd)

mood
Publicité
Posté le 13-10-2006 à 14:41:56  profilanswer
 

n°1456968
MagicBuzz
Posté le 13-10-2006 à 17:04:32  profilanswer
 

ah ouais, ok.
c'est répartir les données sur plusieurs tablespace.
 
intéressant si on a une floppée de disques et qu'on n'est pas en raid.
pour un disque en RAID (comme très souvent), aucun intérêt donc, mise à part tout ralentir.
 
je pense surtout qu'il faut faire gaffe au "fill factor" dans ce cas, qui évite d'avoir un sérieux problème lorsqu'on insère une ligne dans une table organisée en cluster et qu'il n'y a plus de place ;)
 
=> ce que le partitionning permet d'éviter sans se soucier du fill factor

n°1457912
orafrance
Posté le 16-10-2006 à 11:53:23  profilanswer
 

pas seulement, c'est surtout répartir les données dans des entités physiques différentes.
 
Typiquement, tu partitionnes une table de 100 millions de lignes par partition de 100000 lignes te permettra de limiter les I/O. En effet, si le partitionnement est correct (s'entend, pas de sélection de plusieurs partitions) alors le SGBD traitera la table comme si elle n'avait que 100000 lignes et non 100 millions soit un gain de perf spectaculaire :)

n°1457975
Djebel1
Nul professionnel
Posté le 16-10-2006 à 13:50:57  profilanswer
 

merci pour vos réponses (j'utilise mysl).
 
Mais le partitionnement est efficace seulement si on ne tape jamais dans plusieurs tablespace en même temps non ?
Et il est inutile si tu n'as qu'une seule partition non ? Dans ce cas, diviser en plusieurs tables reste-t-il une bonne solution ?
 
Et finalement, si tu fais une utilisation "normale" de la table (c'est-à-dire taper n'importe où dans la table lors d'une requête), ça sert pas à grand chose de partitionner ou de faire plusieurs tables non ?

n°1457981
orafrance
Posté le 16-10-2006 à 14:00:26  profilanswer
 

certes, il est évident qu'il faut faire un partitionnement (= plusieurs tables) logique c'est à dire en fonction d'un critère de sélection (pays, site, période comptable, etc...) et qui contiennent des ensembles disjoints ;)


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  une grosse table VS plusieurs tables de tailles moyennes ?

 

Sujets relatifs
Plusieurs "submit" dans une meme page ?Utilisation de plusieurs contrôles utilisateurs dans une même page
Mise en tableau d'une table[Php & MySQL] Problème pour création de tables
[Sybase] Modifier clé primaire sur une tableRafraichir la liste des tables sous access via vb
jointure double sur une meme table[Resolu] Envoi de plusieurs trames sans attendre l'ACK
Ouvrir des fenêtres sous plusieurs liensQuestion vis a vis des tables sys d'oracle
Plus de sujets relatifs à : une grosse table VS plusieurs tables de tailles moyennes ?


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR