Partitionnement (Oracle)
Le partitionnement de la base de données Oracle est un module de division des données d'Oracle, payant et fréquemment utilisé sur des tables de volumétrie importante pour en augmenter les performances[1].
Le partitionnement
Le partitionnement permet de découper une table ou un index sur des critÚres logiques. La table se comporte alors comme plusieurs tables de dimensions plus petites. Les avantages principaux du partitionnement sont :
- de pouvoir définir des critÚres de stockage différents pour chacune des partitions (tablespace, initial...)
- le découpage logique de la table permet un accÚs plus rapide aux informations (moins de lectures disques à effectuer en particulier)
Types de partitionnements
Il existe trois grands types de partitionnements :
- by range : on définit les partitions par tranche supérieure exclusive (toutes les données < 0)
- by list : on définit une valeur par partition (utilisé lorsque la liste de valeurs pour le champ considéré est faible)
- by hash : la partition de stockage est calculée dynamiquement par un calcul de type hash code, ce mode impose un nombre de partitions 2^n
- composite : c'est une mĂ©thode de partitionnement hybride. Les donnĂ©es sont d'abord partitionnĂ©es by range. Ensuite, chaque partition sera sous-partitionnĂ©e soit by hash ou by list. Il n'est pas nĂ©cessaire d'avoir exactement le mĂȘme nombre de sous-partitions par partition : par exemple, une partition peut ĂȘtre constituĂ©e de 4 sous-partitions alors qu'une autre sera composĂ©e de 5 sous-partitions.
Le mĂ©canisme de dĂ©coupage logique peut ĂȘtre Ă©tendu sur plusieurs champs, ainsi que sur deux niveaux. On parle dans ce cas de sous-partitionnement.
RANGE / HASH (8i)
RANGE / LIST (9i)
RANGE / RANGE (11g)
LIST / RANGE (11g)
LIST / HASH (11g)
Partitionnement local ou global
Il existe deux façons de partitionner un index sous Oracle :
- locally partitioned index : pour chaque partition de table créée, il y a une (et une seule) partition d'index. Les données dans chaque partition d'index pointent sur l'ensemble des données d'une et unique partition de table. Logiquement, si la table a N partitions, l'index aura également N partitions
- globally partitioned index : l'index est partitionnĂ© indĂ©pendamment de la table. Une partition d'index peut pointer sur des donnĂ©es dans une ou plusieurs partitions de table. Un index globalement partitionnĂ© ne peut ĂȘtre que partitionnĂ© by range. Les index sur des tables partitionnĂ©es sont, par dĂ©faut, des index globaux sur une seule partition (en effet, par dĂ©faut, ils ne sont pas partitionnĂ©s).