在 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 进行了一次 FULL 扫描来计算结果。任何人都可以向我解释原因吗?
更新:
感谢您回答我的问题,但这对您的提示没有帮助。Greenplum 总是进行全面扫描,即使我使用 PARTITION BY LIST(day_bucket) 创建表:
创建表事实表( id 字符变化(25)NOT NULL, 没有时区的 day_bucket 时间戳 NOT NULL, ) WITH (appendonly=true, orientation=column, compresstype=zlib, compresslevel=6) 分配者 (user_id) 分区列表 (day_bucket) ( 分区 p20120101 值 ('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), 分区 p20120102 值 ('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), 分区 p20120103 值 ('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), 分区 p20120104 值 ('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'::timestamp without time zone AND day_bucket Append -mytestlist_1_prt_p20120103 mytestlist 上的仅列扫描(成本=0.00..39.61 行=1 宽度=8)过滤器:day_bucket >= '2012-01-02 00:00:00'::timestamp without time zone AND day_bucket