2017-06-21 146 views
0

我創建了一個表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

回答

1

由兩個優化使用的成本模型是不同的。

例如,GPORCA的表掃描幾乎總是花費431,而遺留查詢優化器的花費是可變的。

這些數字在特定的優化器中是有意義的,但它們在兩個不同的優化器之間沒有可比性。

+0

如何知道哪些優化器在這些情況下最好?我們是否必須比較兩個優化器的執行計劃並基於此決定? –

+0

你是說表掃描的成本將是相同的,無論表中的記錄數量是多少? –

+0

前進的計劃是使用新的優化器。 GP5將默認啓用優化器,如果遇到無法處理的內容,它將回退到默認規劃器。 是的,由於編碼和計劃生成的差異,優化器的一些成本固定(基於大小)。 –

相關問題