Partitionnement (Oracle)
# 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.

## 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).
