Précédent   Forum des professionnels en informatique > Bases de données > Firebird > Débuter
Débuter Forum d'entraide pour débuter avec Firebird
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 08/06/2005, 00h32   #1
Membre du Club
 
Inscription : juillet 2004
Messages : 201
Détails du profil
Informations forums :
Inscription : juillet 2004
Messages : 201
Points : 67
Points : 67
Par défaut insertion massive

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 ?
frantzgac est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/06/2005, 16h14   #2
Membre éclairé
 
Inscription : décembre 2004
Messages : 379
Détails du profil
Informations forums :
Inscription : décembre 2004
Messages : 379
Points : 304
Points : 304
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.
jean-jacques varvenne est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/06/2005, 17h58   #3
Rédacteur
 
Inscription : janvier 2004
Messages : 2 123
Détails du profil
Informations personnelles :
Âge : 31

Informations forums :
Inscription : janvier 2004
Messages : 2 123
Points : 1 977
Points : 1 977
Salut,

En effet c'est curieux... (a moins qu'il y est des référencements lors des inserts)

Cela peut-il t'aider ?
http://gagneux.developpez.com/InterBase/ImportExport/
__________________
Ancien pseudo : yobenzen

Recherche un emploi de Chef de Projet ou Développeur en Normandie
Delphi/Oracle/Interbase
Migration vers symfony

CV :
- LinkedIn
- Viadeo
Benjamin GAGNEUX est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/06/2005, 00h46   #4
Membre du Club
 
Inscription : juillet 2004
Messages : 201
Détails du profil
Informations forums :
Inscription : juillet 2004
Messages : 201
Points : 67
Points : 67
Citation:
Cela peut-il t'aider ?
sans aucun doute. J'ignorais que Interbase (FB) possédait ce type d'outil. Je teste et je vous tiens au courant des débits obtenus (relativement aux autres méthodes).

Cela reste néanmoins curieux car non, il n'y a pas de référencement, pas de trigger.

Merci
frantzgac est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/06/2005, 14h59   #5
Membre du Club
 
Inscription : juillet 2004
Messages : 201
Détails du profil
Informations forums :
Inscription : juillet 2004
Messages : 201
Points : 67
Points : 67
Par défaut résultat

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.
frantzgac est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 19h58.


 
 
 
 
Partenaires

Hébergement Web