CLUSTER

Nom

CLUSTER — Donne des informations au serveur sur le regroupement des capacités de stockage
CLUSTER indexname ON table
  

Entrées

indexname

Nom d'un index.

table

Nom d'une table

Sorties

CLUSTER

le groupage s'est effectué correctement.

ERROR: relation <tablerelation_number> inherits "invoice"

ERROR: Relation x does not exist!

Description

CLUSTER instruit Postgres de grouper la classe spécifiée par classname approximativement basée sur l'index spécifié par indexname. L'index doit déja avoir été défini dans classname.

Quand une classe est groupée, c'est un réordonnencement basé sur l'index information. Le groupage est statique. En d'autres termes, comme la classe est mise à jour, les changements ne sont pas groupés. Aucune tentative n'est faite pour garder grpoués les nouvelles instances ou les tuples mis à jour. Si vous désirez le faire, vous pouvez regrouper manuellement par la commande again.

Notes

La table est actuellement copiée vers un index table temporaire, renommé par son nom d'origine. Pour cette raison, toutes les permissions accordées et autres index sont perdus quand le groupage est exécuté.

Dans les cas où vous avez accédé à des lignes uniques au hasard dans une table, l'ordre des données dans la table n'est pas important. Cependant, si vous essayez d'accéder à certaines données plus qu'a d'autres, et qu'il y a un index qui les groupe ensemble, vous aurez tout bénéfice à utiliser CLUSTER.

CLUSTER est très utile dans les cas où vous utilisez un index pour sortir plusieurs lignes d'une table. Si vous avez requit une chaîne de valeurs indexées depuis une table, ou une seule valeur indexée qui possède de multiples lignes, CLUSTER vous aidera parce qu'une fois que l'index identifie le segment de page pour la première ligne, toutes les autres lignes seront probablement sur le même segment de page économisant les accès disque et accélérant la requête.

Il existe deux façons de grouper les données. La première avec la commande CLUSTER, laquelle réordonne la table originale avec l'ordonnancement de l'index que vous spécifiez. Ceci peut être lent sur des grosses tables car les lignes sont récupérées depuis la totalité de l'index, et si la table est pas ordonnée, les entrées sont sur les pages au hazard, ainsi il y a une page disque retrouvée pour chaque lignes déplacée. Postgres possède un cache, mais la majorité d'une grosse table ne sera pas placée dans le cache.

Un autre façon de grouper les données est d'utiliser
SELECT ... INTO TABLE temp FROM ... ORDER BY ...
 
Ceci utilise le code de tri Postgres dans ORDER BY pour équilibrer les index, et est plus rapide pour des données dans le désordre. Vous pouvez alors supprimer l'ancienne table, utiliser ALTER TABLE/RENAME pour renommer temp comme l'ancien nom, et recréer certains index. Le seul problème est que les OIDs ne seront pas préservés. CLUSTER sera plus rapide parce que l'ensemble des données aura déja été ordonné, et l'index existant est utilisé.

Utilisation

Groupe la relation employés sur la base de l'attribut salaire

CLUSTER emp_ind ON emp;
  

Compatibilité

SQL92

Il n'existe pas de commande CLUSTER en SQL92.