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;
下面是查询计划我
有人能解释是Seq扫描和Table Scan之间的区别。我听说两者都是一样的。如果两者都相同,那么为什么成本是不同的。
如果我插入0.1M数据到YEAR1表再表扫描的成本并没有改变,但改变的序列扫描
答
由两个优化使用的成本模型是不同的。
例如,GPORCA的表扫描几乎总是花费431,而遗留查询优化器的花费是可变的。
这些数字在特定的优化器中是有意义的,但它们在两个不同的优化器之间没有可比性。
如何知道哪些优化器在这些情况下最好?我们是否必须比较两个优化器的执行计划并基于此决定? –
你是说表扫描的成本将是相同的,无论表中的记录数量是多少? –
前进的计划是使用新的优化器。 GP5将默认启用优化器,如果遇到无法处理的内容,它将回退到默认规划器。 是的,由于编码和计划生成的差异,优化器的一些成本固定(基于大小)。 –