PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Quand utiliser les tables héritées dans PostgreSQL ?

Il existe des raisons majeures d'utiliser l'héritage de table dans postgres.

Disons que nous avons quelques tableaux nécessaires pour les statistiques, qui sont créés et remplis chaque mois :

statistics
    - statistics_2010_04 (inherits statistics)
    - statistics_2010_05 (inherits statistics)

Dans cet exemple, nous avons 2 000 000 de lignes dans chaque table. Chaque table a une contrainte CHECK pour s'assurer que seules les données du mois correspondant y sont stockées.

Alors, qu'est-ce qui fait de l'héritage une fonctionnalité intéressante - pourquoi est-ce cool de diviser les données ?

  • PERFORMANCE :lors de la sélection des données, nous SELECT * FROM statistiques WHERE date BETWEEN x and Y, et Postgres n'utilise que les tables, là où cela a du sens. Par exemple. SELECT * FROM statistics WHERE date BETWEEN '2010-04-01' AND '2010-04-15' scanne uniquement le tableau statistics_2010_04, tous les autres tableaux ne seront pas touchés - vite !
  • Taille de l'index :nous n'avons pas de gros tableau avec un gros index sur la date de la colonne. Nous avons de petits tableaux par mois, avec de petits index - lectures plus rapides.
  • Maintenance :nous pouvons exécuter un vide complet, réindexer, regrouper sur chaque table mensuelle sans verrouiller toutes les autres données

Pour une utilisation correcte de l'héritage de table comme booster de performances, consultez le manuel de postgresql. Vous devez définir des contraintes CHECK sur chaque table pour indiquer à la base de données sur quelle clé vos données sont fractionnées (partitionnées).

J'utilise beaucoup l'héritage de table, en particulier lorsqu'il s'agit de stocker des données de journal regroupées par mois. Astuce :Si vous stockez des données qui ne changeront jamais (données de journal), créez ou indexez avec CREATE INDEX ON () WITH(fillfactor=100) ; Cela signifie qu'aucun espace pour les mises à jour ne sera réservé dans l'index - l'index est plus petit sur le disque.

MISE À JOUR :le facteur de remplissage par défaut est 100, à partir de http://www.postgresql.org/docs/9.1/static/sql-createtable.html :

Le facteur de remplissage pour une table est un pourcentage compris entre 10 et 100. 100 (emballage complet) est la valeur par défaut