Greenplum 執行計畫中的術語 摘自書籍

2021-10-07 22:39:24 字數 2534 閱讀 6953

摘自書籍:greenplum企業應用實戰 完整版[**,陳曉峰著]

順序掃瞄將乙個資料檔案從頭到尾讀取一次,這種方式非常符合磁碟的讀寫特性,順序讀寫,吞吐很高。對於分析性的語言,順序掃瞄基本上是對全表的所有資料進行分析計算,在是資料倉儲中,大都為這種掃瞄,結合壓縮表使用,可以減少磁碟io的損耗。

索引掃瞄是通過索引來定位資料的,一般對資料進行特定的篩選,篩選後的資料量比較小(對於整個表而言)。使用索引進行篩選,必須先在篩選欄位上建立索引,查詢時先通過索引檔案定位到實際資料在資料檔案中的位置,再返回資料。

當索引定位到的資料在整表中佔比較大的時候,通過索引定位到的資料會使用點陣圖的方式對索引字段進行點陣圖堆表掃瞄,以確定結果資料的準確。資料倉儲很少用這種掃瞄方式。

ctid是postgresql中標記資料位置的字段,通過這個欄位來查詢資料,速度非常快,類似於oracle的rowid。greenplum是乙個分布式資料庫,每乙個子節點都是乙個postgresql資料庫,每乙個子節點都單獨維護自己的一套ctid欄位。

如果要確定到具體一行資料,還必須通過制定另外乙個隱藏字段(gp_segment_id)來確定取哪乙個資料庫的ctid值。

select * from test1 where ctid='(1,1)' and gp_segment_id=1;​​​​​​​
只要sql中有子查詢,需要對子查詢的結果做順序掃瞄,就會進行子查詢掃瞄。

資料庫中有一些函式的返回值是乙個結果值,當資料庫從這個結果集中取出資料的時候,就會用到這個function scan,順序獲取函式返回的結果集(這是函式掃瞄方式,不屬於掃瞄方式),如:

explain select * from generate_series(1,10);
聚合操作,在master上將子節點所有的資料聚合起來。一般的聚合規則是:哪乙個子節點的資料先返回到master上就將該節點的資料先放到master上。

重新分布資料,當需要做跨庫關聯或者聚合的時候,當資料不能滿足廣播的條件,或者廣播的消耗過大時,greenplum就會選擇重分布資料,即資料按照新的分布鍵(關聯鍵)重新打散到每個segment上,重分布一般在以下三種情況發生:

(1)關聯:將每個segment的資料根據關聯鍵重新計算hash值,並根據greenplum的路由演算法路由到目標子節點中,使關聯時屬於同乙個關聯鍵的資料都在同乙個segment上。

(2)group by:當表需要group by,但是group by的字段不是分布鍵時,為了使group by的字段在同乙個庫中,greenplum會分兩個group by操作來執行,首先,在單庫上執行乙個group by會分兩個group by操作來執行,首先,在單庫上執行乙個group by操作,從而減少需要重分布的資料量;然後將結果資料按照group by欄位重分布,之後再做聚合獲得最終結果。

(3)開窗函式:跟group by類似,開窗函式的實現也需要將資料重分布到每個節點上進行計算,不過其實比group by更複雜一些。

(4)切片(slice)

greenplum在實現分布式執行計畫的時候,需要將sql拆分成多個切片(slice),每乙個slice其實是單庫執行的一部分sql,上面描述的每乙個motion都會導致greenplum多乙個slice操作,而每乙個slice操作節點都會發起乙個程序來處理資料。

在每個sql的執行計畫中,每一步都會有(cost=0.01..0.05 rows=3 width=150)這3項表示sql的消耗,後面會介紹消耗具體的計算方法。

(1)cost

以資料庫自定義的消耗單位,通過統計資訊來估計sql的消耗。

(2)rows

根據統計資訊估計sql返回結果集的行數。

(3)width

返回結果集每一行的長度,這個長度值是根據pg_statistic表中的統計資訊來計算的。

(1)filter過濾

where條件中的篩選條件,在執行計畫中就是filter關鍵字。

filter:relfilenoe = 1249::oid
(2)index cond

如果在查詢的表中where篩選的字段中有索引,那麼執行計畫會通過索引定位,提高查詢的效率。index cond就是定位索引的條件。

(3)recheck cond

在使用位圖掃瞄索引的時候,由於postgresql裡面使用的是mvcc協議,為了保證結果的正確性,要重新檢查一下過濾條件。

執行hash join的時候的關聯條件:

(5)merge

在執行排序操作時資料會在子節點各自排好序,然後在master上做乙個歸併操作。

(6)hash key

在資料重分布時候指定的重算hash值的分布鍵:

(7)materialize

將資料儲存在記憶體中,避免多次掃瞄磁碟帶來的開銷。

MYSQL中的執行計畫

mysql的執行計畫 explain顯示了mysql如何使用索引來處理select語句以及連線表。可以幫助選擇更好的索引和寫出更優化的查詢語句。使用方法,在select語句前加上explain就可以了 如 explain select from test1 explain列的解釋 table 顯示這...

ocacle 執行計畫 Oracle執行計畫

一 什麼是oracle執行計畫?執行計畫是一條查詢語句在oracle中的執行過程或訪問路徑的描述 二 怎樣檢視oracle執行計畫?因為我一直用的plsql遠端連線的公司資料庫,所以這裡以plsql為例 配置執行計畫需要顯示的項 工具 首選項 視窗型別 計畫視窗 根據需要配置要顯示在執行計畫中的列 ...

mysql執行計畫 MySQL 執行計畫

1.執行計畫的定義 什麼是執行計畫 查詢計畫 呢?執行計畫就是一系列的操作步驟。sql是宣告性語言,它只告訴資料庫要查詢什麼,但並不告訴資料庫如何去查。資料庫所要做的就是基於演算法和統計資訊計算出一條最佳的訪問路徑。這個工作是由優化器來完成的。優化器會比較不同的執行計畫,然後選擇其中最優的一套。2....