From: | Guillaume Lelarge <guillaume(at)lelarge(dot)info> |
---|---|
To: | Pierre BOIZOT <pierre(dot)boizot(at)gmail(dot)com> |
Cc: | PG-Mail-liste <pgsql-fr-generale(at)postgresql(dot)org> |
Subject: | Re: Partitionement |
Date: | 2013-10-05 16:00:31 |
Message-ID: | 1380988831.2604.9.camel@localhost.localdomain |
Views: | Whole Thread | Raw Message | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-fr-generale |
On Sat, 2013-10-05 at 07:24 +0200, Pierre BOIZOT wrote:
> hello,
>
> oui oui le code ne provient pas des articles.
>
> c'est un extrait de code du cas qui m'occupe.
>
> Les clause de contrainte de la partition.
>
> Donc le partitionnement est fait sur un code et un interval de date.
>
> La table a 380 partition et en aura à terme 750 environs.
>
> Les requètes sont un peu lentes :-( + de 30 secondes.
>
> je recherche la cause ....
>
> la parametre contraint_exclusion est bien à on .
> malgré cela le plan cherche à parcourir toutes les partition de la table.
>
> d'ou ma question sur la relation entre les contraintes de la tables et
> les restrictions de la clause where.
>
> Y a t il une régle enoncée dans la documentation...
>
> s'il y a une différence entre contrainte et clause where cela
> revient il à intéroger la table sans les contraintes ?
>
> Je vais me faire un petit test pour explorer cela.
>
> ma question avait pour but de comprendre s'il y a des régles précises
> le point 5.9.4 et 5.9.6. de la documentation ne dit pas comment se
> comporte l'exclusion de contrainte dans le cas ou la clause where ne
> comporte pas toutes les colonnes déclarées dans la contrainte de la
> table.
>
J'avoue que je ne sais pas. Monter un test ne devrait pas être très
compliqué :
pierre=# create table parent (id integer, c1 integer, c2 integer);
CREATE TABLE
pierre=# create table fille1(check (c1>0 and c1<=10 and c2<50))
inherits(parent);
CREATE TABLE
pierre=# create table fille2(check (c1>10 and c1<=20 and c2>=50))
inherits(parent);
CREATE TABLE
pierre=# insert into fille1 select i+1, i+1, i*5
from generate_series(0, 9) as i;
INSERT 0 10
pierre=# insert into fille2 select i+10, i+10, i*50
from generate_series(1, 10) as i;
INSERT 0 10
pierre=# explain select * from parent where c1<5;
QUERY PLAN
----------------------------------------------------------------
Append (cost=0.00..34.25 rows=648 width=12)
-> Seq Scan on parent (cost=0.00..0.00 rows=1 width=12)
Filter: (c1 < 5)
-> Seq Scan on fille1 (cost=0.00..34.25 rows=647 width=12)
Filter: (c1 < 5)
(5 rows)
Par contre, qu'on soit bien d'accord, PostgreSQL est assez sensible sur
ce sujet (le partitionnement). Donc attention à son utilisation...
--
Guillaume
http://blog.guillaume.lelarge.info
http://www.dalibo.com
From | Date | Subject | |
---|---|---|---|
Next Message | Guillaume Lelarge | 2013-10-05 16:09:49 | Re: psql : extension des commandes ... |
Previous Message | Pierre BOIZOT | 2013-10-05 05:24:48 | Re: Partitionement |