效能調優8 分組聚合 group by

2022-01-10 07:38:36 字數 1195 閱讀 9719

聚合實際上對資料做分組統計,sql server使用兩種操作符來實現聚合,流聚合(stream aggregation)和雜湊聚合(hash aggration)。流聚合是非阻塞性的,具有流的特性,流聚合操作符;邊處理資料,邊輸出聚合的結果。而雜湊聚合是阻塞性的,只要處理完所有的資料,才會輸出聚合的結果。

流聚合要求輸入的資料集在group by 即分組列上是有序的,也就是說,流聚合需要排序。分組列的位置和順序不會影響聚合的結果,因此分組列的排序是任意的。對於索引上的流聚合,由於資料是已經排序的,使用流聚合演算法沒有排序操作的開銷。

流聚合演算法是:第乙個被讀取的資料會建立第乙個分組,後續讀入的資料都會先和當前的分組匹配,如果匹配,把該行放入到當前的分組中;如果不匹配,建立新的分組,直到所有資料行都處理完成為止,最終對各個分組計算聚合值。

在執行計畫中,雜湊聚合使用的物理操作符是:hash match(aggregate),實際上,hash join也是使用hash match作為物理操作符。雜湊聚合不需要排序,但是需要授予記憶體來建立hash表。優化器傾向於使用雜湊聚合來對無序的大表進行聚合操作,雜湊聚合的演算法:

雜湊聚合使用hash表來儲存各個分組的資料,最後平行計算各個分組中的資料。由於資料是無序的,任何資料行都有可能屬於任意乙個分組,因此,雜湊聚合直到處理完所有的資料行才會輸出結果。

hash聚合在建立雜湊表時,需要向系統申請授予記憶體,當授予記憶體不足時,需要把雜湊表的一部分雜湊桶溢位到硬碟的workfiles中。這和hash join的記憶體使用和溢位相同。

列儲存索引適合於資料倉儲中,主要執行大容量資料載入和唯讀查詢,與傳統面向行的儲存方式相比,使用列儲存索引儲存可最多提高 10 倍查詢效能 ,與使用非壓縮資料大小相比,可提供多達 7 倍資料壓縮率 。列儲存索引使用用「批處理執行模式」的模式,這與行儲存使用的逐行資料讀取模式對比,效能大幅提公升。

列儲存索引主要在下面三個特性上提公升查詢的效能:

一般情況下,資料倉儲的查詢語句只會查詢少數幾個列的資料,其他列的資料不需要載入到記憶體中,這就使得列儲存特別適合用於資料倉儲中對星型連線(star- join)進行聚合查詢,所謂星型連線(star-join)的聚合查詢是指對乙個大表(large table)和多個小表(little table)進行連線,並對large table 進行聚合查詢。在資料庫倉庫中,是指事實表和維度表的連線。在大表上建立列儲存索引,sql server 引擎將充分使用批處理模式(batch processing mode)來執行星型查詢,獲取更高的查詢效能。

4 分組聚合

引數名 接受 含義 預設 by 1.若為函式,則對索引進行計算並分組 2.若為字典 series,則將字典 series的值做為分組依據 3.若為numpy陣列,則以陣列元素為分組依據 4.若為字串 字串列表,則以其所代表的字段進行分組 無axis int表示操作軸向 0level int 索引名 ...

Pandas學習筆記 04 分組GroupBy

第四章 分組 總結 目錄2 聚合函式 3 變換和過濾 多維度列分組 groupby中傳入相應列名構成的列表 分組依據 列或列的子集 字典或series 函式 索引級別等 ngroups屬性 獲取分組個數 groups屬性 返回從組名對映到組索引列表的字典 size方法 統計每組元素個數 get gr...

8 go語言 測試與效能調優

程式應該多做測試,少做除錯 傳統測試 vs 驅動測試 go語言使用 傳統測試 test public void testadd 測試資料和測試邏輯混合在一起 出錯資訊不明確 一旦乙個資料出錯測試全部結束 驅動測試 test struct,整數溢位 最大的整數 1成為最小整數 for test ran...