對於teradata SQL級別的優化,使用EXPLAIN查看執行計划基本上是最直接也最好用的。
EXPLAIN 展示出來的內容重要但同時也很多,我們只需要提取其中的關鍵字便可大致描述出來我么SQL的執行過程。
數據檢索涉及到AMPs: All-AMPs retrieve step, Single-AMP retrieve step等這些內容表明了我們的SQL檢索數據用到了那些AMP來協同工作。
數據檢索的策略:我們經常可以看到諸如下面的內容:by way of all-row scan(相當了全表掃描), by way of the primary index, by the way of hash value(通常發生於JOIN的時候)。這些表明了AMP檢索數據的方式
Join 前的處理:由於teradata要求JOIN的數據在同一個AMP上,因此Join 前必然會交換數據,不論是數據的重分布(redistribution )還是復制表(duplicated )。我們經常可以看到這些內容duplicated on all AMPs, redistributed by the hash code of (new hash column(s))。這些表明了數據交換的方式。
Join的類型:數據被放置於同一個AMP后Join才會產生,teradata會選擇Join的類型。using a product join, using a single partition hash join, using a merge join這些表明了Join的類型
Confidence Level(不知怎么用中文描述):是影響teradata優化器的一個重要因子,分為四個級別
• No confidence
• Low confidence
• High confidence
• Index Join confidence(僅對於表之間的Join)
我們經常可以看到這樣的內容 The size of Spool 1 is estimated with no confidence to be 428 rows
基本上我們可以認為越低級別的Confidence,可信度越不高。Confidence受統計信息的影響,因此當我們Confidence過低時應該考慮下是否收集下統計信息。(統計信息並不是影響Confidence的唯一因素 )
在工作中就遇到這樣的坑:兩表關聯。一張表的數據分布到140多個AMP上,大概每個AMP上100多W,維表DISTINCT以后大概4到5W的樣子。但是由於維表統計信息是在最初收集的,就看到了上面那樣的情況,teradata估算維表也就幾百條樣子,最后產生了product join。根據product join原理,每個AMP產生的比較次數為100*40000 萬次。最后收集統計信息Join的策略變為了hash join
————————————————
版權聲明:本文為CSDN博主「_假象」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/wali_wang/article/details/50494539
