【问题标题】:Order of the tables in a JOINJOIN 中表的顺序
【发布时间】:2019-12-09 07:35:51
【问题描述】:

在 spark-sql 中,我有一个查询,它在联接中使用多个表(大表和小表)。我的问题是-does the order of these tables matter with respect to query performance ? 例如

select larger.col1, smaller.col2
from larger
Left Join smaller
on larger.key = smaller.key
Left Join larger2
on larger2.key2 = smaller.key2

我在网上搜索过,但没有得到确凿的答案。那么,如果我改变左右表的顺序,性能会有所不同吗?

【问题讨论】:

  • 可以的。但更重要的是,左连接和右连接不是可交换的 - 因此顺序实际上会影响数据。
  • 如果您更改连接的顺序,结果集将会改变。性能是次要考虑因素。
  • 查看here 了解性能,here 了解对结果的影响
  • 内连接怎么样?如果我在内部连接中交换较大和较小的顺序,性能会有所不同吗?
  • hive 文档旨在解决所有这些问题cwiki.apache.org/confluence/display/Hive/LanguageManual+Joins

标签: sql hive apache-spark-sql hiveql


【解决方案1】:

连接顺序似乎已被 Spark 更改以进行优化。

可能有:

  • 重新排序 JOIN 优化器
  • 重新排序 JOIN 优化器 - 星型架构
  • 重新排序 JOIN 优化器 - 基于成本的优化

以下内容似乎对这个主题有所启发:

https://www.waitingforcode.com/apache-spark-sql/reorder-join-optimizer-star-schema/read https://www.waitingforcode.com/apache-spark-sql/reorder-join-optimizer/read https://www.waitingforcode.com/apache-spark-sql/reorder-join-optimizer-cost-based-optimization/read

【讨论】:

  • 外部资源呢?
猜你喜欢
  • 1970-01-01
  • 2020-07-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-06-10
  • 1970-01-01
  • 2013-11-05
  • 2011-04-27
相关资源
最近更新 更多