【问题标题】:Performance of JOINS in SAP HANA Calculation ViewSAP HANA 计算视图中 JOINS 的性能
【发布时间】:2017-12-06 16:48:38
【问题描述】:

例如: 我有 4 列(A、B、C、D)。

我认为我应该在两个投影(CA_CONCAT-> A+B+C+D)中创建一个连接列,而不是连接每一列,并在此进行连接,只是为了检查哪种方法的性能更好。

它在早期工作得更快,但在少数 CV 中,这种方法有时速度较慢,尤其是在过滤时!

任何人都可以建议哪种方法有效吗?

【问题讨论】:

  • 我不明白你的情况。请包含一些代码或屏幕截图以使其更清晰。 “连接每一列”是什么意思?连接是两个表之间的操作,连接条件来自这两个表之间的关系和您的查询。
  • 这个不清楚。 “对此进行加入”到底是什么意思?请使用足够多的单词、句子和对部分示例的引用来清楚。请给minimal reproducible example。一般来说,如果你告诉它你的数据结构,DBMS 可以优化。例如对于排序索引,对于f(t.x,t.y)=f(u.x,u.y),DBMS 必须访问两个表的每一行,但对于t.x=u.x and t.y=u.y,它可以跳过大多数t.x=u.x 测试,而当t.x<>u.x 可以跳过所有t.y=u.y 测试。首先了解 DBMS 的实现/优化。无知的猜测是尖刻的。

标签: sql join calculated-columns hana


【解决方案1】:

我认为连接字段的 JOIN 条件不会在性能上表现得更好。

虽然我们通常说 HANA 数据库上的列表不需要索引,但列表的结构可以与每列上的索引一起使用。 因此,如果您连接 4 列并生成一个新的计算字段,首先您放弃在 4 列和相应的连接列上使用这些索引的选项

我没有检查执行计划,但它可能会对这些列进行全面扫描

事实上,我很惊讶你提到它工作得更快,而且只有少数人遇到问题

因为在数据库列上连接或应用函数本身甚至只是 SELECT 过程的工作量。它可能包括隐式类型转换操作,这可能会带来超出预期的额外工作量

【讨论】:

    【解决方案2】:

    首先我建议考虑将您的表设置为列存储并检查新的性能。

    之后,如果您在连接中使用 OR 条件,我建议将 JOIN 分隔为多个 JOIN。

    第三,与 LEFT JOIN 或 LEFT OUTER JOIN 相比,INNER JOIN 将为您提供更好的性能。

    关于 JOIN 和性能的另一件事,您最好在 PRIMARY KEYS 上而不是在每一列上使用它们。

    【讨论】:

      【解决方案3】:

      对我来说,使用多个字段进行连接的时间都比使用串联字段的连接执行得更快。对于过滤场景,planviz 显示当我加入多个字段时,过滤器被推送到两个表。另一方面,当我加入连接字段时,只有一个表被过滤。

      但是,如果您在两个字段上都设置了过滤器(例如 Tab1 中的 PRODUCT 和 Tab2 中的 MATERIAL),那么您可以将过滤器下推到两个表中。

      喜欢:

      Select * from CalculationView where PRODUCT = 'A' and MATERIAL = 'A' 
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-03-01
        • 1970-01-01
        相关资源
        最近更新 更多