我使用Netezza/Pure数据进行查询。我在两个列A和B上有一个内部联接(成为一个散列连接)。A是一个分布良好的列,B是一个分布不好的列。由于某些原因,我的查询计划总是使用B而不是A作为连接的分发键,这会导致巨大的性能问题。
生成统计信息确实有助于缓解这一问题,但由于性能限制,在每次查询之前生成统计信息并不可行。在批处理运行之前,我会这样做,而不是在批处理中的每个查询之间执行。
简而言之,源表有很好的发行版,但当我加入它们时,它们选择了一个糟糕的分发键(实际上在源中根本没有将它用作分发列)。
因此,我的问题是,在没有生成统计信息的情况下,在JOIN中影响分发密钥选择的好方法是什么。我尝试过在源表的分发列周围进行更改,但这并没有多大效果,即使我确保所有的斜率都小于0.5。
发布于 2015-02-10 19:18:22
解决办法是强制使用详尽的规划师。
设置num_star_planner_rels = X;-将X设为非常高。
IBM团队认为,超过7个实体(表#)的查询将使用一个名为“雪花”的贪婪查询计划器。在7个或更少的实体,它将使用蛮力方法,以找到最佳计划。
交换条件是,对于大量实体来说,穷尽搜索非常昂贵。
发布于 2015-02-06 00:54:50
您可以创建一个临时表并强制分发,以便它们对齐,这将加快联接的速度。
https://stackoverflow.com/questions/27910114
复制相似问题