我使用以下代码段继承了一些遗留SQL代码(为简单起见,我已经匿名)。
CREATE EXTERNAL TABLE dim_abc (user_id int)
CREATE TABLE dim_foo AS
SELECT user_id,
...
FROM my_table a
JOIN (SELECT * FROM dim_abc) b
ON (a.user_id = b.user_id)
而不是......
FROM my_table a
JOIN dim_abc b
ON (a.user_id = b.user_id)
知道为什么以前的开发人员会在JOIN中完成SELECT吗?
**代码是Hive。
答案 0 :(得分:3)
没有subselect的版本由于各种原因更好。由于子查询,某些数据库(您未提及数据库)将无法使用dim_abc
上的索引。
但这不是你的问题。我最好的猜测是代码开始变得更复杂。现在dim_abc
可能在某个时间点需要额外的逻辑。随着代码的简化,最终结果是from
子句中的无用子查询。这只是一个猜测,但它提供了一个看似合理的方案。