|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Membre du Club
![]() Inscription : juillet 2004 Messages : 201 ![]() |
bjr
j'insère via une appli delphi 350000 enregistrements dans une table interbase. Si la table n'est pas indéxée, j'insère 3,7 enregistrement à la seconde. Si elle est indéxée 120 enregistrements à la seconde. Je m'étonne de ce résultat. Gérer un index entraine davantage de travail, pourquoi est-ce plus rapide ? |
|
|
00
|
|
|
#2 |
|
Membre éclairé
![]() Inscription : décembre 2004 Messages : 379 ![]() |
la solutions passe par un "create external table" en d'autre terme, on crée un lien entre une table et un fichier.
pour fonctionner, il faut que le fichier à importer soit "colonné", donc chaque "champ" à une taille fixe. une fois "créée", il suffit alors de faire un "insert table matableinterne select * from matableexterne" et hop, le diable est dans la boîte en un minimum de temps, compte quelques secondes/minutes pour l'insertion du volume indiqué. recherche sur ce forum, tu trouvera plusieurs réponses à ce problème courant. n'oublie j'amais que l'insertion doit ce faire sur une table non indexé ou alors tous les indexes désactivés, puis créer ou réactiver les index. deux raisons à cela: 1) la lenteur! 2) la désorganisation des index. dans les deux cas, c'est pénalisant. la création ou la réactivation des index prendra moins de temps (au total) que de les laisser actifs. si le fichier à importer et assez "brute", une procédure stockée peut souvent arranger les chose en lisant les données de la table externe puis en les injectants dans la table "interne" (regarde sur ce forum, il y a des exemples) bonne chance. |
|
|
00
|
|
|
#3 |
![]() ![]() Inscription : janvier 2004 Messages : 2 123 ![]() |
Salut,
En effet c'est curieux... (a moins qu'il y est des référencements lors des inserts) Cela peut-il t'aider ? |
|
|
00
|
|
|
#4 | |
|
Membre du Club
![]() Inscription : juillet 2004 Messages : 201 ![]() |
Citation:
Cela reste néanmoins curieux car non, il n'y a pas de référencement, pas de trigger. Merci |
|
|
|
00
|
|
|
#5 |
|
Membre du Club
![]() Inscription : juillet 2004 Messages : 201 ![]() |
bjr
je confirme que l'insertion via une table externe est bien plus rapide que par une application à travers les composants IB. je n'ai pas testé avec ou sans index car cela va de soi dans ce cas malgré l'étonnante constatation du premier post toujours inexpliquée. Je génère les scripts par Delphi (car j'ai quand même une trentaine de table à insérer) et je tiens le code à disposition de qui est intéressé (gratuitement). 797000 lignes pour environ 180Mo sont insérées en 5 minutes. La génération du fichier texte (base externe) prend un peu plus de temps. environ 7 à 8 minutes (CPU 1GHZ). Bien que le post initial reste inexpliqué, soyons pragmatique, je considère le cas résolu. |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com