Overblog
Editer l'article Suivre ce blog Administration + Créer mon blog
23 novembre 2008 7 23 /11 /novembre /2008 10:08

Bonjour,


Vous n'avez pas oublié ma table Reponse_1_P avec ses quelques dizaines de millions de lignes ?

Tant mieux, car on va en reparler encore un peu.

Juste pour rappel, la table est partionnée par date, puis sous-partionné par questionnaire.

Plusieurs choses peuvent arriver à cette table:

  • Quotidiennement de nouvelles données vont être intégrées
  • On va utiliser cette table pour créer de nouvelles tables d'aggrégations (calcul de moyenne par exemple) afin de rendre les requêtes moins couteuses
  • On va devoir sauvegarder.
  • Et de temps en temps purger un peu !

Mais avent tout, sachant que bon nombre de requêtes vont porter sur le pays en plus de la date et du type de questionnaire, il serait peut-être bon d'indexer la colonne ID_PAYS.


Rien d'extraordinaire me direz vous:



CREATE INDEX Idx_Pays ON Reponse_1_P(Date_Questionnaire,Id_Pays);

C'est effectivement une possibilité mais dans ce cas, l'index sera GLOBAL à la table, alors que des le départ il était question que les interrogations portent sur une date et un type de questionnaire.

Pour simplifier cela signifie que nos requêtes vont porter non pas sur l'ensemble de la table (même si rien nous en empeche), mais plutôt sur les partitions et sous-partitions.

Oracle permet de créer des indexes propres à la partition. Il suffit pour cela d'ajouter la clause "LOCAL"



CREATE INDEX Idx_Pays ON Reponse_1_P(Date_Questionnaire,Id_Pays) LOCAL;


Les avantages sont multiples:

  • Possibilité de reconstruire les indexes par partitions et donc de découper la maintenance de l'index dans le temps
  • Lors de l'ajout de nouvelles données dans une nouvelle partition,l'index sera mis à jour uniquement au niveau partition et non pas de facon globale. Or sur des tables de plusieurs centaines de millions de lignes l'impact n'est pas négligeable.


D'une façcon générale, Oracle recommande d'utiliser les indexes de type local dans un environnement type Datawarehouse. En effet, une maintenance sur une des partitions la table rendrait l'index invalide. Dans le cas d'un index global, c'est tout l'index qui serait invalide et le cout de la reconstruction de l'index serait couteux. Depuis Oracle 10, il est possible d'effectuer une maintenance d'index après un DDL sans rendre l'index inutilisable. La recommandation d'utiliser des index de type local reste cependant d'actualité. 

Remarque: Des indexex bitmap sur une table partitionnée sont toujours de type local.


Encore une fois, on se rend compte que les options que proposent ORACLE sont nombreuses et que lorsque on implémente une fonction avancée d'ORACLE, il convient de se documenter  un minimum au risque de se retrouver avec des problèmes de peformance ou d'administration complexes à résoudre de part les contraintes de disponibilités et des volumétries en jeu.

LAO.



Partager cet article
Repost0

commentaires