greenplum中的表扫描和seq扫描有什么区别

问题描述:

我创建了一个表Year1并使用Generate_series将数据插入到表中。greenplum中的表扫描和seq扫描有什么区别

DROP TABLE IF EXISTS YEAR1; 
CREATE TABLE YEAR1 
(
    ID  BIGSERIAL NOTNULL, 
    DAT_YEAR  INTEGER 
); 

INSERT INTO YEAR1 (DAT_YEAR) 
SELECT GENERATE_SERIES(1,10000); 

创建和插入数据后,我跑到下面的查询与传统和PQO优化

SET OPTIMIZER=OFF; 
EXPLAIN 
SELECT MAX(DAT_YEAR) FROM YEAR1; 

SET OPTIMIZER=ON; 
EXPLAIN 
SELECT MAX(DAT_YEAR) FROM YEAR1; 

下面是查询计划我

enter image description here

有人能解释是Seq扫描和Table Scan之间的区别。我听说两者都是一样的。如果两者都相同,那么为什么成本是不同的。

如果我插入0.1M数据到YEAR1表再表扫描的成本并没有改变,但改变的序列扫描

enter image description here

由两个优化使用的成本模型是不同的。

例如,GPORCA的表扫描几乎总是花费431,而遗留查询优化器的花费是可变的。

这些数字在特定的优化器中是有意义的,但它们在两个不同的优化器之间没有可比性。

+0

如何知道哪些优化器在这些情况下最好?我们是否必须比较两个优化器的执行计划并基于此决定? –

+0

你是说表扫描的成本将是相同的,无论表中的记录数量是多少? –

+0

前进的计划是使用新的优化器。 GP5将默认启用优化器,如果遇到无法处理的内容,它将回退到默认规划器。 是的,由于编码和计划生成的差异,优化器的一些成本固定(基于大小)。 –