需要优化配置单元查询



我们有两个包含巨大数据的表。我们必须在这两个表之间执行内部联接。连接条件基于3列c1、c2、c3。

需要您的帮助来编写针对上述场景的优化查询。请参考下面的数据模型。

table1
c1,c2,c3,c4,c5

table2
c1,c2,c3

感谢你的帮助。谢谢

如果我正确理解Hortonworks的创始人Owen O'Malley,你可以通过编写来优化它

SELECT t1.* from table1 t1
JOIN (SELECT table2.* FROM table2) t2
ON (t1.c1=t2.c1 AND t1.c1 = t2.c2 AND t1.c3 = t2.c3)

因为您似乎没有使用表2中的任何新数据,逻辑是"返回表1中表2中存在的所有行"。这是通过使用left semi join来完成的
如果表2不是唯一的(c1、c2、c3的相同组合出现多次),则记录数量可能会增加。

内部联接将为您提供表1和表2中存在的所有行,以及与表2中其他列存在的任何额外组合。像上面提到的@dimamah这样的左半联接将只提供左表1中存在的行。

对于第一个解决方案,您应该期待更多的行

SELECT t1.* 
FROM table1 t1
INNER JOIN table2 t2
ON (t1.c1=t2.c1 AND t1.c1 = t2.c2 AND t1.c3 = t2.c3)

对于第二个解决方案,您将获得与t1 相同的行数

SELECT t1.*
FROM table1 t1
LEFT SEMI JOIN table2 t2
ON (t1.c1=t2.c1 AND t1.c1 = t2.c2 AND t1.c3 = t2.c3)

相关内容

  • 没有找到相关文章

最新更新