首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >哪些情况可以从减少、复制和重新分发连接提示中受益?

哪些情况可以从减少、复制和重新分发连接提示中受益?
EN

Database Administration用户
提问于 2019-01-24 20:20:10
回答 1查看 575关注 0票数 8

从Server 2008开始的从条款文件中简要地提到了3个连接提示及其基本机制:

  • Reduce
  • 复制
  • 再分配

然而,似乎没有多少关于何时有必要使用它们的信息。

看来,它们可以与哈希、循环和合并一起使用,这些都是为了这个问题的目的已经被理解的。

文件中的有关章节:

对于SQL数据仓库和并行数据仓库,这些连接提示适用于两个发行版不兼容列上的内部联接。它们可以通过限制查询处理过程中发生的数据量来提高查询性能。SQL数据仓库和并行数据仓库允许的连接提示如下:

  • 减少了连接右侧表要移动的行数,以便使两个发行版不兼容的表兼容。减少提示也称为半连接提示。
  • 复制使连接列中的值从联接左侧的表中复制到所有节点。右边的表被连接到这些列的复制版本。
  • 重分发强制在JOIN子句中指定的列上分发两个数据源。对于分布式表,并行数据仓库将执行洗牌操作。对于复制的表,并行数据仓库将执行trim操作。要了解这些移动类型,请参阅并行数据仓库产品文档中“理解查询计划”主题中的"DMS查询计划操作“部分。当查询计划使用广播移动解析不兼容的发行版连接时,此提示可以提高性能。
EN

回答 1

Database Administration用户

回答已采纳

发布于 2020-06-12 06:01:13

通常情况下,我们使用联接提示来纠正优化器的错误,以确定更好的查询计划。这种情况的发生有很多原因,基本上可以归结为优化是一种“足够好”的方法,受到时间预算的限制,用于寻找计划。

降低

“又称半连接提示”。对于半连接,我们只对另一个表中是否存在匹配行感兴趣。实际上,这通常是因为查询有一个EXISTS()谓词。如果有一个匹配或一百万,结果将是相同的-从左边(外部)表中的单行将被返回。

例如,我们可能需要查询所有曾经下过订单的客户。假设客户是一个小表,但是订单很大,分布在许多节点上。如果我们只需要知道每个客户是否至少存在一行,那么将所有这些数据复制到客户所在的任何地方都是浪费的。减少提示提供了以下内容。从概念上讲,select distinct CustomerId from Order运行在每个节点的保持顺序上,这是相对较快的。

复制

这是减少的反面。在这里,一个表从它的"home“节点大量复制到所有保存数据的节点,该表位于联接的右侧。

在这个例子中,我们需要所有订单的总价值,以Customer之和。我们只有相对较少的客户,可以轻松地适应于一个节点。然而,Orders表是巨大的,并且跨越许多节点。为了满足查询,我们必须将客户数据和订单数据同时放到同一个节点上。它将更有效地复制客户,因为它是较小的。复制提示强制这种行为,在每个持有订单行的节点上创建Customer表的完整副本。

重分发

这是另一种说明如何将行从"home“节点移动到另一个节点的方法,以便可以计算联接谓词。这一次,我们要求服务器复制数据,并根据一些新的分发函数分发该副本,这样复制的行将在正确的节点上完成连接。

现在我们有了一个零售电子商务网站,拥有大量的客户和大量的订单。客户是通过CustomerId发布的,订单是由OrderDate分发的。如果我们现在想要join on Customer.CustomerId = Order.CustomerId,最有效的计划可能是根据CustomerId复制订单和重新分发,然后将每个新分区传递给相应的节点。这与复制不同,因为在那里,整个表被复制到每个节点,而在这里,每个节点的一部分数据被复制到其他节点。重新分配的具体处理方式将取决于当前分布和基数。

票数 2
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/228026

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档