Bonjour,
Je dois charger une table de faits. Cette table contient aujourd'hui environ 20 millions de lignes.
La table est constituée de 23 colonnes.
Parmis ces colonnes, j'ai 14 clé étrangères vers des tables de dimensions (et pour chacune un index rattaché), les 9 colonnes restantes sont des attributs ou des indicateurs.
Ma clé primaire est la suivante : PK_TAB(VERSION, JOUR, ID)
Chaque jour je charge environ 1.5-2 millions d'enregistrement pour les 2 versions en cours. Je dois donc au préalable supprimer les enregistrements concernant ces versions.
Ma question est la suivante :
Quel est le moyen le plus performant pour supprimer ces données?
Code : Sélectionner tout - Visualiser dans une fenêtre à part DELETE FOM TAB WHERE VERSION=:1;
Code : Sélectionner tout - Visualiser dans une fenêtre à part DELETE FROM TAB WHERE VERSION IN ('version1', 'version2');
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 CREATE TAB_T AS SELECT * FROM TAB WHERE VERSION NOT IN ('version1', 'version2'); DROP TABLE TAB; ALTER TABLE TAB_T RENAME TO TAB; <reconstruction des index>
Comment organiser mes index?
Faut il que j'utilise la clé primaire pour supprimer la version?
Ou faut-il que j'utilise la clé étrangère de la version?
Quelle type d'index dans ce cas? B-tree ou bitmap?
Le B-tree ferait presque 900 Mo, le bitmap 4-5 Mo.
Et pour les autres clés étrangères?
Dois-je utiliser le partitionnement par version?
Partager