gpt4 book ai didi

performance - Spark : why is a subselect with "NOT IN" dramatically slower than "IN"?

转载 作者:行者123 更新时间:2023-12-05 06:28:23 24 4
gpt4 key购买 nike

我在 Apache Spark 2.x 中有两个表。每个表都有一个公共(public)行“IDNUM”。称它们为表 A 和表 B。

这在 Apache SparkSQL 中很快:

SELECT COUNT(*) FROM A where IDNUM IN (SELECT IDNUM FROM B);

这非常慢:

SELECT COUNT(*) FROM A where IDNUM NOT IN (SELECT IDNUM FROM B);

它太慢了,以至于它完成得更快:

total = SELECT COUNT(*) FROM A;
quan = SELECT COUNT(*) FROM A where IDNUM IN (SELECT IDNUM FROM B);
print(total-quan)

但我不明白为什么 NOT IN 应该这么慢。

最佳答案

我不知道 Apache Spark,但在我看来,数据库可以通过 IDNUM 快速访问 A 和 B 中的行/项目,因此如果数字通过条件“IDNUM IN (SELECT IDNUM FROM B)”的元素数量很少。获取整个表的计数是一种常见情况,因此会对其进行优化以提高速度。

'IDNUM NOT IN (SELECT IDNUM FROM B)'天真地需要扫描 IDNUM 列以查找 A 中的所有行,以检查它们是否不在 B 的集合中。因为您只是在进行计数,所以您不需要确实需要来自这些行的 IDNUM 值,但我猜查询优化器不够智能,无法将查询转换为两个计数之间的差异。

关于performance - Spark : why is a subselect with "NOT IN" dramatically slower than "IN"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54374270/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com