Bonjour à tous!
Je vais essayer d’être clair dans mes explication mais c'est un peu confus dans ma tête...
Je travaille sur une base un de données oracle 10g qui se dégrade énormément au niveau des performances (insert/update, requête, activation des clés...). Je pense que le problème vient des index.
C'est une base de type 'BI'. J'ai une table de faits contenant environ 15 millions de lignes, et tout un ensemble de table de référence. Certaines tables de référence possèdent plusieurs milliers de ligne alors que d'autre n'en font à peine une dizaine.
Il y a environ 40 dimensions.
L'alimentation de la table de fait se fait à partir d'une table source. Lors de l'alimentation certaine dimension sont directement fournies. Aucune jointure n'est nécessaire. Pour d'autre, il faut faire une jointure avec la table de référence pour récupérer l'ID.
Au niveau de la restitution, les utilisateurs créent eux même leur requête (avec Brio/HPS) à partir de libellé, donc à chaque fois une jointure est faite entre la table de fait et la table de dimension sur la PK de la dimension.
Il y a un index Bitmat sur tous les champs de la table de fait pointant sur une dimension. C'était comme ca quand je suis arrivé et je pense que le soucis vient de là.
Déjà est-ce que le problème vient réellement de là? Faut-il mettre un index sur chaque champs? (sachant qu'une jointure peut être fait sur tous les champs).
Sinon comment bien choisir les champs où mettre les index?
Faut-il privilégier les champs ayant beaucoup de valeurs différentes?
Les champs où l'on fait des jointures lors de l'alimentation?
Faut-il essayer de recréer les index régulièrement?
Par avance merci pour vos conseils!!![]()
Partager