【发布时间】:2017-09-06 03:09:55
【问题描述】:
可以针对 Teradata 优化以下查询吗?
我们需要小表 A 中的所有记录,以及大表 B 中的所有对应记录,它们与非唯一键匹配
或者,换句话说:除了所有来自 B 且在 A 中不匹配的所有内容。
也许有 JOIN 的东西?或者是非相关查询的子选择,这也适用于 Teradata 吗?
SELECT a.nonunique
, a.colX
FROM small_tab a
UNION ALL
SELECT b.nonunique
, b.colY
FROM large_tab b
WHERE EXISTS (
SELECT 1
FROM small_tab a
WHERE a.nonuniqe = b.nonunique
);
感谢您的帮助!
=========更新====
根据this MySQL question 中的 quanos 答案,在 Teradata 中,带有非相关子查询的以下语句是否也会更快?
SELECT a.nonunique
, a.colX
FROM small_tab a
UNION ALL
SELECT b.nonunique
, b.colY
FROM large_tab b
WHERE b.nonunique IN
(
SELECT DISTINCT nonunique
FROM small_tab
GROUP BY nonunique
)
我目前无法在 Teradata 中进行测试,家里只有一个 Oracle 实例..
【问题讨论】:
-
你真的需要
UNION吗?不同的处理是一个巨大的开销,UNION ALL会更快。 -
谢谢,我监督了。它来自我第一次使用的另一个选择,我认为它的效率较低(涉及返回重复项的连接)。更新了..
标签: sql optimization teradata exists