1 votes

Optimisation SQL

Comment insérer des données sur 2 millions de lignes dans une table de base de données Oracle où nous avons de nombreux index? Je sais qu'une option consiste à désactiver l'index puis à insérer les données. Quelqu'un peut-il me dire quelles sont les autres options?

1voto

SQLMenace Points 68670

Chargement en vrac avec des données pré-triées selon l'ordre des clés d'index

1voto

Mac Points 4570

Vérifiez SQL*Loader (surtout le paragraphe sur l'optimisation des performances) : c'est l'utilitaire standard de chargement en masse pour Oracle, et il fait du bon travail une fois que vous savez comment l'utiliser (comme toujours avec Oracle).

1voto

zibidyum Points 126

Il existe de nombreuses astuces pour accélérer l'insertion, ci-dessous j'en ai écrit quelques-unes

  • Si vous utilisez sequence.nextval pour l'insertion, assurez-vous que la séquence a une grande valeur de cache (1000 est généralement suffisant)
  • Supprimez les index avant l'insertion et recréez-les ensuite (assurez-vous d'obtenir les scripts de création des index avant de les supprimer) lors de la création, vous pouvez utiliser l'option parallel
  • Si la table cible a des dépendances fk, désactivez-les avant l'insertion et réactivez-les après l'insertion. Si vous êtes sûr de vos données, vous pouvez utiliser l'option novalidate (l'option novalidate est valide pour Oracle, d'autres systèmes de gestion de bases de données relationnelles ont probablement une option similaire)
  • Si vous sélectionnez et insérez, vous pouvez donner un indice parallèle pour l'instruction select et pour l'insertion vous pouvez utiliser un indice d'ajout (insertion directe) (le concept d'insertion directe est valide pour Oracle, d'autres systèmes de gestion de bases de données relationnelles ont probablement une option similaire)

0voto

u07ch Points 5303

Je ne suis pas sûr de la manière dont vous insérez les enregistrements; si possible, insérez les données par petits morceaux. Selon mon expérience, 50 ensembles de 20 000 enregistrements sont souvent plus rapides que 1 x 1000000

Assurez-vous que vos fichiers de base de données sont suffisamment grands avant de commencer pour éviter une croissance de la base de données pendant l'insertion ...

0voto

Miguel Ping Points 9013

Si vous êtes sûr des données, en plus de l'indice vous pouvez désactiver les vérifications référentielles et les contraintes. Vous pouvez également réduire le niveau d'isolation de la transaction.

Toutes ces options ont un coût, cependant. Chaque option augmente votre risque d'avoir des données corrompues dans le sens où vous pourriez vous retrouver avec des clés étrangères nulles, etc.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X