J'ai une énorme table partitionnée stockée dans une table PostgreSQL. Chaque table enfant a un index et une contrainte de vérification sur son identifiant, par ex. (Deatils non pertinents pour plus de clarté):Partitionnement de table PostgreSQL +: inefficace max() et min()
Master table: points
Column | Type | Modifiers
---------------+-----------------------------+------------------------
id | bigint |
creation_time | timestamp without time zone |
the_geom | geometry |
Sub-table points_01
Column | Type | Modifiers
---------------+-----------------------------+-------------------------
id | bigint |
creation_time | timestamp without time zone |
the_geom | geometry |
Indexes:
"points_01_pkey" PRIMARY KEY, btree (id)
"points_01_creation_time_idx" btree (creation_time)
"points_01_the_geom_idx" gist (the_geom) CLUSTER
Check constraints:
"enforce_srid_the_geom" CHECK (srid(the_geom) = 4326)
"id_gps_points_2010_08_22__14_47_04_check"
CHECK (id >= 1000000::bigint AND id <= 2000000::bigint)
Maintenant,
SELECT max(id) FROM points_01
est instantanée, mais:
SELECT max(id) FROM points
qui est une table principale pour points_01 .. points_60
et devrait prendre très peu de temps à l'aide vérifier les contraintes, prend plus d'une heure car le planificateur de requêtes n'utilise pas les contraintes de vérification. Selon le wiki PostgreSQL (dernière section de this page), il s'agit d'un problème connu qui sera corrigé dans les prochaines versions.
Y a-t-il un bon hack qui fera en sorte que le planificateur de requêtes utilise les contraintes de vérification et les index des sous-tables pour les requêtes max()
et min()
?
Merci,
Adam
Pouvez-vous montrer votre plan d'exécution? –