Tôt le matin, un travail pgAgent actualise le contenu du tableau A à partir du tableau B sur ma base de données PostgreSQL 8.4. Le tableau A contient environ 140k enregistrements sur 91 colonnes et possède deux index - l'un faisant partie de la CLÉ PRIMAIRE et l'autre un index GIST sur une colonne de géométrie POINT PostGIS.
Pour accélérer le processus, le travail supprime l'index sur la colonne de géométrie, avant de supprimer les enregistrements de la table A et d'insérer les enregistrements de la table B, puis l'index est recréé. Tout cela étant fait, le démon autovacuum se met au travail quand il en a envie (après une dizaine de minutes de comparaison des statistiques de travail et des statistiques de table pour le temps de fin du travail et le temps d'exécution autovacuum).
Après avoir vérifié sur la table ce matin après tout ce qui s'était passé, les statistiques de la table m'ont dit que la taille de la table était de 272 Mo, la taille de la table TOAST était de 8192 octets et la taille de l'index était de 23 Mo. Cela semblait assez important, j'ai donc émis une commande REINDEX sur la table et la taille de l'index est descendue à 9832 Ko.
Ma (mes) question (s) est la suivante:
Pourquoi le REINDEX réduit-il apparemment la taille des index si les index (ou du moins l'index de la colonne de géométrie) ont été reconstruits à partir de zéro? Dois-je m'assurer que la table a été aspirée / analysée avant la construction des index? La suppression de l'index sur la clé primaire n'est-elle pas un facteur à cet égard? Qu'est-ce que je rate?
ANALYZE
la taille signalée diminue également.