teradata EXPLAIN 读懂关键字--读懂执行计划

(–本文是个人学习和使用过程中的总结,如有错误欢迎指正 )

对于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

你可能感兴趣的:(teradata)