云服务器价格_云数据库_云主机【优惠】最新活动-搜集站云资讯

谷歌云_路由器的服务器无响应_企业级

小七 141 0

联接基数设置机制

"基数"是可以应用于计算视图中联接的设置。它指定联接的另一个表中存在多少个与一个表的条目匹配的条目。它由两个数字组成,左边的数字描述了右表条目的匹配条目数,右边的数字描述了左表条目的匹配条目数。例如,假设在表1(左表)和表2(右表)之间的字段"employee"上有一个联接。联接基数"1..n"指定表2中的每个条目在表1中最多有一个匹配条目。相反,表1中的每个条目在表2中可能有0到n个匹配条目。符号"n"在这里代表任意正数。例如,表1中的条目"Alice"在表2中可能有0、1或任意数量的匹配项。再举一个例子"1..1"。这表示表1中的每个条目(例如表1的条目"Alice")都有0,或者表2中有1个匹配条目。类似地,大数据和云计算,表2的"Alice"在表1中最多也有一个匹配项。

优化器使用基数设置来根据请求的查询字段决定是否必须执行联接或可以省略联接,而不牺牲数据的正确性。如果执行联接既不能添加记录,也不能减少记录,并且没有从要省略的表请求任何字段,则可以省略联接。

虽然内部联接可以添加(另一个表中有多个匹配项)和删除(没有匹配项–".1"包括0)记录,但外部联接只能添加记录。因此,通过连接基数保证要修剪的表最多有一个匹配项,就可以对外部连接进行连接修剪。在这方面,文本连接的行为类似于左外部连接。在引用连接的情况下,只有为不被修剪的表设置了引用完整性时,才能进行修剪。在HANA SPS03之前,云服务器有哪些,引用完整性放在左表中。由于SAP Web IDE for SAP HANA SPS03,淘客推广渠道,引用完整性可以放在左侧、右侧或两个表上。

要修剪的表需要设置"..1"的规则的一个例外是,如果只请求聚合模式为"count distinct"的度量值。在这种情况下,count distinct计算将使待修剪表中可能存在的重复值再次唯一。因此,数据分析和大数据,即使"n..m"基数成立,联接执行也不会更改count distinct度量值的结果。

这导致以下所有条件都必须成立,才能进行联接修剪:

不向待修剪表请求任何字段联接类型是outer,在not be pruned表上具有完整性的引用,或者文本联接,并且to be pruned表包含language列对于要修剪的表,连接基数为"..1",或者只请求具有count distinct聚合的度量值,或者根本不请求度量值。

如果表仅直接涉及连接基数,则可以通过建模工具获得建议。这些建议是基于提案时的数据基数。如果联接包含更多的节点(例如,投影节点进入的表),则这些建议不可用。

无论通过何种方式实现基数设置(通过建议或手动设置),优化器在决定联接修剪时都将依赖这些值。没有运行时检查!如果该设置假装基数低于数据的实际基数(例如,它被设置为"n..1",但实际上"n..m"保持不变),忽略联接可能会导致与执行联接时相比度量值的变化。下面的示例将对此进行说明。

SAP Note 2737941中描述的提示有助于根据当前数据检测连接基数的错误设置。

连接基数设置的目的

通过依赖指定的连接基数,优化器根据请求的字段决定是否必须执行连接。在定义了许多连接的模型中删减连接可以显著提高性能并减少临时内存消耗。想象一下,一个定义的星形联接通过进一步的联接链包含100个或更多的表。如果不请求维度值,并且基数设置为"n..1"或"1..1",则可以省略所有联接,并且查询将减少到对中心表的单个表访问,而不是遵循所有可能的联接级联。

现在应该已经清楚了,通过联接可以实现的性能改进和资源消耗当基数设置不能反映真实的数据基数时,修剪会带来数据不一致的风险。因此,很好地理解连接基数是至关重要的,下面的例子希望能提供这一点。

下面所有的例子都是基于两个表和这两个表之间的连接。在某些示例中,将添加额外的投影或聚合节点。除此之外,这些例子非常简单,以说明工作中的机制。显然,即使存在这样简单的模型,也无法观察到性能提高。选择简单的模型是因为大型模型中的实际效果将更复杂,并且额外的建模选择可以在那里发挥作用。

简单地阅读示例的描述应该足以很好地理解,但也应该可以根据描述自己构建示例提供。

这两个表将在整个示例中使用:

销售订单表在整个示例中使用

员工表在整个示例中使用

您可以看到表"salesOrders"中的字段"employee"和表"employees"中的字段"employee"之间存在"1..1"关系。相比之下,物联网平台,表"salesOrders"中的字段"employee"和表"employees"中的字段"manager"之间存在"1..n"关系。

示例

以下示例将显示

示例摘要