Comment insérer des données d'environ 2 millions de lignes dans une table de base de données Oracle où nous avons plusieurs index? Je sais qu'une option est la désactivation de l'index, puis l'insertion des données. Quelqu'un peut-il me dire quelles sont les autres options?Ajustement SQL
Répondre
Vous ne savez pas comment vous insérez les enregistrements; si tu peux; insérez les données dans des morceaux plus petits. Dans mon expérience de 50 ensembles de 20k dossiers est souvent plus rapide que 1 x 1000000
Assurez-vous que vos fichiers de base de données sont assez grandes avant de commencer à vous sauver de la croissance de la base de données au cours de l'insert ...
Si vous êtes sûr les données, outre l'index, vous pouvez désactiver les contrôles référentiels et de contraintes. Vous pouvez également réduire le niveau d'isolation des transactions.
Toutes ces options ont cependant un prix. Chaque option augmente votre risque d'avoir des données corrompues dans le sens où vous pouvez vous retrouver avec de null FK etc.
charge en vrac avec des données pré-triés dans l'index pour clé
Check SQL*Loader out (en particulier le paragraphe sur performance optimization): C'est l'utilitaire de chargement en vrac standard pour Oracle, et il fait du bon travail une fois que vous savez comment l'utiliser (comme toujours avec Oracle).
il y a beaucoup d'astuces pour fixer de insert, je l'ai écrit ci-dessous certains d'entre eux
- si vous utilisez sequence.nextval pour l'insertion faire séquence a une grande valeur sûre du cache (1000 est généralement suffisant)
- goutte indexes avant insertion et création après (assurez-vous d'obtenir les scripts de création des index avant de les déposer) lors de la création vous pouvez utiliser l'option parallèle
- si la table cible a des dépendances fk les désactiver avant l'insertion et après l'activation de l'insertion à nouveau. si vous êtes sûr de vos données, vous pouvez utiliser novalidate l'option si vous sélectionnez et insérez vous pouvez donner (en option novalidate est valable pour oracle, d'autres systèmes SGBDR ont probablement une option similaire)
- indice parallèle pour instruction select et insérez vous pouvez utiliser append indice (insert-chemin direct) (concept insertion chemin direct est valable pour oracle, d'autres SGBDR systèmes ont probablement une option similaire)
en tant une autre option, on peut utiliser Oracle Pompes de données avancées et plus rapides (expdp, impdp) disponibilité des utilitaires 10 G onward. Cependant, Oracle prend toujours en charge l'ancienne exportation/importation (exp, imp).
Oracle nous offre beaucoup de choix pour le chargement de données, d'une manière plus rapide que les autres:
- Oracle10 Data Pump utilitaire d'importation Oracle
- SQL insert et fusion
- déclarations charges en vrac PL/SQL pour la forall opérateur PL/SQL
- SQL * Loader
- 1. Ajustement de courbe
- 2. Ajustement de largeur d'une Listview
- 3. Ajustement de l'image Flex dans Canvas
- 4. Ajustement automatique Entrées de base de données?
- 5. Ajustement des positions des composants d'oscillation
- 6. Ajustement du fuseau horaire en PHP avec DateTime/DateTimeZone
- 7. Ajustement du volume sonore java en temps réel
- 8. Ajustement des fichiers de configuration XML à partir d'un script
- 9. Ajustement du point décimal pour chaîne dans l'iPhone
- 10. Ajustement de la hauteur de la résolution de l'écran jQuery
- 11. Ajustement de l'animation Cocoa dans les modèles MVC/OOP
- 12. Ajustement de la largeur de la liste déroulante de remplissage automatique dans une zone de texte
- 13. Ajustement automatique de la largeur de TabItem pour remplir les espaces?
- 14. SSRS: ajustement du rapport et de la taille de la page à l'exécution
- 15. Ajustement de Pickerview et de Tableview en tant que sous-vues sur le même écran
- 16. Ajustement de l'algorithme iPhone TableSearch pour éviter le retard de l'interface utilisateur
- 17. Ajustement de l'interface lorsque le clavier apparaît pour UITextField dans un simple UIVIew sans défilement?
- 18. SQL CLR SqlBulkCopy from DataTable
- 19. serveur sql sql requête
- 20. Sql
- 21. pl sql et sql dynamique
- 22. SQL dynamique vs SQL statique
- 23. Transférer des Jobs SQL de SQL 2005 vers SQL 2008
- 24. Installer Shield 2009 Premier: Installer Windows Installer 3.1 ou 2.0 (meilleur ajustement pour le système) avec n'importe quel redémarrage du système
- 25. Conversion de SQL Server à Oracle SQL
- 26. Équivalent T-SQL de PL/SQL% TYPE?
- 27. Sql Query to Linq To Sql
- 28. Différences entre SQL Plus et SQL "normal"?
- 29. Télécharger SQL SERVER AGENT - Microsoft SQL Server
- 30. sql requête dans le serveur SQL
Je pense que des informations supplémentaires sont nécessaires pour fournir une réponse significative. Si UNDO est suffisamment dimensionné, ce n'est pas un problème si l'insertion de l'insert est l'objectif * only *. Avez-vous besoin que l'insertion soit une transaction unique pour la cohérence de lecture/l'annulation? Y a-t-il un DML concurrent à la table provenant d'autres sources lors de l'insertion? La nature de l'application est-elle telle que le temps d'exécution de cette opération est prohibitif? – dpbradley
Je voudrais que les données soient insérées dans une seule transaction – venkat