我在 redshift 中有 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
是一个唯一的列
最佳答案
这两个查询执行不同的操作。
如果id
在table1
中重复,JOIN
可以增加行数。
IN
永远不会重复行。
如果 id
可以重复,您应该使用能满足您需求的版本。如果id
保证是唯一的,那么两者在功能上是等价的。
根据我的经验,JOIN
通常至少与 IN
一样快。当然,您可以测试您的数据,但这是一个起点。
关于sql - 在 Redshift 中执行 WHERE IN 或 INNER JOIN 更快吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63341257/