Re: [pgsql-ru-general] Re: [pgsql-ru- general] Отсутствует опти мизация на patition таблиц ах
- From: Maxim Vetrov <muxas(at)mail(dot)ru>
- To: Ivan Zolotukhin <ivan(dot)zolotukhin(at)gmail(dot)com>
- Cc: pgsql-ru-general(at)postgresql(dot)org
- Subject: Re: [pgsql-ru-general] Re: [pgsql-ru- general] Отсутствует опти мизация на patition таблиц ах
- Date: Tue, 25 Dec 2007 22:39:20 +1000
- Message-id: <4770F9F8.4040200@mail.ru> <text/plain>
Ivan Zolotukhin wrote:
Добрый день,
Да, пример проверил, довольно странно, что не работает. Причину пока
не знаю. Попробуйте написать в pg-general, там должны помочь.
При этом лично я вполне успешно и давно использую constraint_exclusion
с единственным отличием, что check constraint у меня between, а не
точное равенство.
Regards,
Ivan
On Dec 24, 2007 3:48 PM, Maxim Vetrov <muxas(at)mail(dot)ru> wrote:
Доброго времени суток!
FreeBSD devel.muxas.net 6.2-RELEASE-p8 FreeBSD 6.2-RELEASE-p8 #0: Sun
Oct 21 19:39:17 VLAST 2007
root(at)devel(dot)muxas(dot)net:/usr/obj/usr/src/sys/DEVEL i386
postgres (PostgreSQL) 8.2.5
Никак не получается подружить оптимизатор запросов с partitioning. Вот
живой пример:
stac=# show constraint_exclusion;
constraint_exclusion
----------------------
on
(1 запись)
stac=# create table parent(col1 smallint);
CREATE TABLE
stac=# create table child1(check (col1=1)) inherits(parent);
CREATE TABLE
stac=# create table child2(check (col1=2)) inherits(parent);
CREATE TABLE
stac=# insert into child1 values(1);
INSERT 0 1
stac=# insert into child2 values(2);
INSERT 0 1
stac=# explain select * from parent where col1=1;
QUERY PLAN
---------------------------------------------------------------------------
Result (cost=0.00..114.75 rows=33 width=2)
-> Append (cost=0.00..114.75 rows=33 width=2)
-> Seq Scan on parent (cost=0.00..38.25 rows=11 width=2)
Filter: (col1 = 1)
-> Seq Scan on child1 parent (cost=0.00..38.25 rows=11 width=2)
Filter: (col1 = 1)
-> Seq Scan on child2 parent (cost=0.00..38.25 rows=11 width=2)
Filter: (col1 = 1)
(8 rows)
stac=# analyze verbose parent;
INFO: analyzing "public.parent"
INFO: "parent": scanned 0 of 0 pages, containing 0 live rows and 0 dead
rows; 0 rows in sample, 0 estimated total rows
ANALYZE
stac=# analyze verbose child1;
INFO: analyzing "public.child1"
INFO: "child1": scanned 1 of 1 pages, containing 1 live rows and 0 dead
rows; 1 rows in sample, 1 estimated total rows
ANALYZE
stac=# analyze verbose child2;
INFO: analyzing "public.child2"
INFO: "child2": scanned 1 of 1 pages, containing 1 live rows and 0 dead
rows; 1 rows in sample, 1 estimated total rows
ANALYZE
stac=# explain select * from parent where col1=1;
QUERY PLAN
-------------------------------------------------------------------------
Result (cost=0.00..40.28 rows=13 width=2)
-> Append (cost=0.00..40.28 rows=13 width=2)
-> Seq Scan on parent (cost=0.00..38.25 rows=11 width=2)
Filter: (col1 = 1)
-> Seq Scan on child1 parent (cost=0.00..1.01 rows=1 width=2)
Filter: (col1 = 1)
-> Seq Scan on child2 parent (cost=0.00..1.01 rows=1 width=2)
Filter: (col1 = 1)
(8 rows)
Это конечно самый простой тест, но абсолютно то же самое происходит и с
большими таблицами по 500,000 записей. Vacuum analyze не помогают;
constraint_exclusion включен. В чем загвоздка?
muxas
---------------------------(end of broadcast)---------------------------
TIP 3: Have you checked our extensive FAQ?
http://www.postgresql.org/docs/faq
---------------------------(end of broadcast)---------------------------
TIP 4: Have you searched our list archives?
http://archives.postgresql.org
Я, кажется, нашел ответ, но нельзя сказать, что он меня устраивает.
При изменении типа поля на integer, оптимизация включается, т.е.
по-видимому кол-во значений smallint достаточно мало,чтобы оптимизатор
считал нужным использовать обычный просмотр значений по порядку...
muxas
Home |
Main Index |
Thread Index