В greenplum у меня есть большая таблица с именем fact_table
, которая разделена на RANGE(day_bucket)
.Почему это так медленно для следующего запроса:
select max(day_bucket) from fact_table where day_bucket >= '2011-09-11 00:00:00' and day_bucket < '2011-12-14'.
Полагаю, он должен просто посмотреть на заголовок каждого раздела и немедленно вернуть результат, поскольку каждый раздел одного и того же столбца day_bucket
.Но greenplum сделал ПОЛНОЕ сканирование, чтобы вычислить результат.Кто-нибудь может объяснить мне причину?
Обновление:
Спасибо за ответ на мой вопрос, но это не поможет с вашим советом.Greenplum всегда выполняет полное сканирование, даже если я создаю таблицу с PARTITION BY LIST (day_bucket):
CREATE TABLE fact_table (
id character varying(25) NOT NULL,
day_bucket timestamp without time zone NOT NULL,
)
WITH (appendonly=true, orientation=column, compresstype=zlib, compresslevel=6) DISTRIBUTED BY (user_id) PARTITION BY LIST(day_bucket)
(
PARTITION p20120101 VALUES ('2012-01-01 00:00:00'::timestamp without time zone) WITH (tablename='fact_table_1_prt_p20120101', appendonly=true, orientation=column, compresstype=zlib, compresslevel=6 ),
PARTITION p20120102 VALUES ('2012-01-02 00:00:00'::timestamp without time zone) WITH (tablename='fact_table_1_prt_p20120102', appendonly=true, orientation=column, compresstype=zlib, compresslevel=6 ),
PARTITION p20120103 VALUES ('2012-01-03 00:00:00'::timestamp without time zone) WITH (tablename='fact_table_1_prt_p20120103', appendonly=true, orientation=column, compresstype=zlib, compresslevel=6 ),
PARTITION p20120104 VALUES ('2012-01-04 00:00:00'::timestamp without time zone) WITH (tablename='fact_table_1_prt_p20120104', appendonly=true, orientation=column, compresstype=zlib, compresslevel=6 ),
.....
Команда объяснения показывает, что она всегда выполняет полное сканирование:
-> Столбец только для добавленияСканирование в mytestlist_1_prt_p20120102 mytestlist (стоимость = 0,00..34.95 строк = 1 ширина = 8) Фильтр: day_bucket> = '2012-01-02 00:00:00' :: отметка времени без часового пояса И day_bucket Сканирование столбцов только для добавления на mytestlist_1_prt_p20120103mytestlist (стоимость = 0.00..39.61 рядов = 1 ширина = 8) Фильтр: day_bucket> = '2012-01-02 00:00:00' :: отметка времени без часового пояса И day_bucket