Partitionnement

Le partitionnement d'une base de données améliore les performances et simplifie la maintenance. Si vous fractionnez une grande table en tables individuelles plus petites, les requêtes qui n'accèdent qu'à une fraction des données peuvent être exécutées plus rapidement, car la quantité de données à analyser est moindre. De même, les tâches de maintenance, comme la reconstruction d'un index ou la sauvegarde d'une table, peuvent être effectuées plus rapidement.

Il est possible d'effectuer le partitionnement sans fractionner les tables en les plaçant sur des unités de disque individuelles. Placer une table sur un seul lecteur et les tables associées sur une unité séparée peut améliorer les performances des requêtes, car lors de l'exécution de requêtes impliquant des jointures entre les tables, les données sont lues simultanément par plusieurs têtes. Les groupes de fichiers SQL Server peuvent être utilisés pour spécifier les disques sur lesquels les tables doivent être placées.

Partitionnement matériel

Le partitionnement matériel structure la base de données de façon à tirer parti de l'architecture matérielle disponible. Voici des exemples de partitionnement matériel :

  • Processeurs multiples autorisant plusieurs threads d'opérations et permettant l'exécution simultanée de nombreuses requêtes. À l'inverse, une seule requête peut s'exécuter plus rapidement sur plusieurs processeurs grâce à l'exécution simultanée de plusieurs de ses composants. Par exemple, chaque table référencée dans la requête peut être analysée simultanément par un thread différent.

  • Les dispositifs RAID permettent l'entrelacement des données sur plusieurs unités de disques, offrant un accès plus rapide aux données puisqu'un nombre plus élevé de têtes de lecture et écriture travaillent simultanément. Une table entrelacée sur plusieurs lecteurs peut normalement être analysée plus rapidement que la même table stockée sur un seul lecteur. À l'inverse, le stockage des tables sur des disques séparés à partir des tables associées peut améliorer considérablement les performances des requêtes de jonction de ces tables. Pour plus d'informations, consultez RAID.

Partitionnement horizontal

Le partitionnement horizontal divise une table en plusieurs tables. Chaque table contient alors le même nombre de colonnes, mais moins de lignes. Par exemple, une table qui contient 1 milliard de lignes peut être segmentée horizontalement en 12 tables, chacune de ces tables représentant un mois de données d'une année donnée. Toute requête recherchant les données d'un mois spécifique ne consulte que la table concernée.

Le choix du mode de partitionnement horizontal des tables dépend de la façon dont les données sont analysées. Il convient de segmenter les tables de sorte que les requêtes consultent le moins de tables possible. Sinon, le recours à un trop grand nombre de requêtes UNION pour fusionner logiquement les tables lors de la requête risquerait d'affecter les performances. Pour plus d'informations sur l'interrogation des tables ayant fait l'objet d'un partitionnement horizontal, consultez Scénarios d'utilisation des vues.

Le partitionnement horizontal des données basé sur l'âge et l'utilisation est le plus fréquemment utilisé. Une table peut contenir, par exemple, des données concernant les cinq dernières années mais seules les données concernant l'année en cours sont régulièrement consultées. Dans ce cas, vous pouvez envisager le partitionnement des données en cinq tables, chacune contenant les données relatives à une seule année.

Pour plus d'informations, consultez Tables et index partitionnés.

Partitionnement vertical

Le partitionnement vertical divise une table en plusieurs tables contenant moins de colonnes. Les deux types de partitionnement vertical sont la normalisation et le fractionnement des lignes.

  • La normalisation désigne le processus de base de données standard consistant à supprimer les colonnes redondantes d'une table et à les replacer dans des tables secondaires liées à la table primaire par des relations de clé primaire et de clé étrangère.

  • Le fractionnement de lignes divise verticalement la table initiale en tables comportant moins de colonnes. Chaque ligne logique dans une table fractionnée correspond à la même ligne logique dans les autres tables et identifiée par une colonne UNIQUE KEY identique dans toutes les tables partitionnées. Par exemple, la jointure de la ligne avec ID 712 de chaque table partitionnée reconstitue la ligne initiale.

Comme le partitionnement horizontal, le partitionnement vertical permet d'analyser moins de données lors des requêtes. Les performances de requête s'en trouvent ainsi améliorées. Par exemple, une table comportant sept colonnes, dont seules les quatre premières font l'objet de consultations régulières, bénéficiera du fractionnement de ses trois dernières colonnes dans une table séparée.

Le partitionnement vertical doit être envisagé avec précaution, car l'analyse des données provenant de plusieurs partitions nécessite que les requêtes joignent les tables. Les performances peuvent également pâtir du partitionnement vertical si les partitions sont très volumineuses.