我们有一个针对不同来源的查询,每天运行很多次。每次运行40多分钟,我们都在尝试减少查询执行时间
查询所做的只是尝试向现有表中添加新行(通过比较键)
SELECT A.*
FROM
(
SELECT *
FROM A
)
A
LEFT OUTER JOIN
(
SELECT f1, f11
FROM B
WHERE f13 IN ( SELECT f13 FROM C)
)
B
ON A.f1 = B.f1
AND nvl(A.f11,'NULL') = nvl(B.f11,'NULL')
WHERE isnull(B.f1)
AND isnotnull(A.f1)
我想做的
SELECT A.* .
FROM (
SELECT *
FROM A
)
A
WHERE NOT EXISTS
(
SELECT 1
FROM B WHERE f13 IN ( SELECT f13 FROM C)
and A.f1 = B.f1 and A.f11 = B.f11
)
这不仅可以产生类似的结果,而且有助于减少执行时间。查询的一个小小的改进将大有帮助,因为这个查询每天运行8次。
任何建议都会有帮助。
1条答案
按热度按时间9rbhqvlz1#
在Hive里
NOT EXISTS
将生成与left join + isnull filter
.你可以使用union+
row_number()
对于这个答案中的增量更新https://stackoverflow.com/a/44755825/2700344,如果没有连接,它可能工作得更快