如何在SQL中交换左联接的边



我有两个表要查询,表A有大约53_000行,而表B有大约530M行。

SELECT
b.some_field AS field,
a.*
FROM tableA a -- 53_462
LEFT JOIN tableB b -- 527_795_032
ON a.user_id = b.user_id
AND a.numeric_field >= b.numeric_field
AND a.numeric_field <= b.other_numeric_field
;

这会扼杀查询引擎,因为右边比左边大得多,所以我认为对于左边的每一行,它都必须查询右边。

在这种情况下(右手边的尺寸比左手边大得多(最好做什么:

我正在考虑两种可能性:

  • 切换边并使用右联接
  • 通过查询右侧的行并连接该表来创建一个可能小得多的表

我最终创建了一个只有匹配行的临时表。

CREATE TABLE b_temp
....
IN (
SELECT
DISTINCT user_id
FROM
a
)

这使我可以将b表筛选到一个合理的大小。

相关内容

  • 没有找到相关文章

最新更新