【问题标题】:Is it faster to do WHERE IN or INNER JOIN in Redshift在 Redshift 中执行 WHERE IN 或 INNER JOIN 是否更快
【发布时间】:2020-11-30 02:53:39
【问题描述】:

我有 2 个红移表:

表1

|   ids |
|------:|
|     1 |
|     2 |
|     6 |
|     9 |
|    12 |

表2

|   id |    value |
|-----:|---------:|
|    1 | 0.134435 |
|    2 | 0.767417 |
|    3 | 0.779567 |
|    4 | 0.726051 |
|    5 | 0.405138 |
|    6 | 0.775206 |
|    7 | 0.699945 |
|    8 | 0.499433 |
|   10 | 0.457386 |
|    9 | 0.227511 |
|   10 | 0.369292 |
|   11 | 0.653735 |
|   12 | 0.537251 |
|    2 | 0.953539 |
|   13 | 0.377625 |
|   14 | 0.973905 |
|    4 | 0.104643 |
|    1 | 0.450627 |

我基本上想获取 table2 中 id 在 table1 中的行,我有两种可能性:

SELECT *
FROM table2
WHERE id IN (SELECT ids FROM table1)

SELECT t2.id, t2.value
FROM table2 t2
INNER JOIN table1 t1
ON t2.id = t1.ids

我想知道它们之间是否有任何性能差异。

(我知道我可以在这个示例中进行测试以找出答案,但我想知道是否有一个总是更快)

编辑:table1.ids 是一个独特的列

【问题讨论】:

  • 我遇到了这个问题。花了 3 天时间排除故障。从外观上看,'IN' 和 'EXISTS' 在 RedShift 中没有得到很好的优化。 “内部连接”执行得更快。我正在使用 TB 大小的表格。我会选择内部连接。

标签: sql join amazon-redshift


【解决方案1】:

这两个查询做不同的事情。

如果idtable1 中重复,则JOIN 可以乘以行数。

IN 永远不会重复行。

如果id 可以复制,你应该使用你想要的版本。如果保证id 是唯一的,那么两者在功能上是等价的。

根据我的经验,JOIN 通常至少与IN 一样快。当然,您可以测试您的数据,但这是一个起点。

【讨论】:

  • 太棒了!刚刚编辑了这个问题,说table1.ids 确实是独一无二的。谢谢
猜你喜欢
  • 2021-09-24
  • 2010-12-21
  • 1970-01-01
  • 1970-01-01
  • 2019-01-15
  • 2013-05-14
  • 1970-01-01
  • 2021-11-29
  • 2023-01-30
相关资源
最近更新 更多