在MySQL中将SELECT DISTINCT和UNION DISTINCT结合起来 - 有什么影响吗?

时间:2015-05-09 16:45:26

标签: mysql sql distinct union

以下两个SQL语句功能相同:

SELECT DISTINCT a,b,c FROM table1
UNION DISTINCT
SELECT DISTINCT a,b,c FROM table2

SELECT a,b,c FROM table1
UNION DISTINCT
SELECT a,b,c FROM table2

...因为" DISTINCT"适用于整个联盟,因此在SELECT个人中是多余的。

(注意:UNION DISTINCT本身与UNION完全相同,但为了清晰起见,我添加了DISTINCT关键字

我的问题是,MySQL中两者之间是否存在性能差异或执行计划差异?或优化程序将SELECT DISTINCT变为常规SELECT

1 个答案:

答案 0 :(得分:1)

您需要检查执行计划。但是,我希望执行计划是不同的 - 或者至少它们应该在某些情况下。

第一个查询:

SELECT DISTINCT a, b, c FROM table1
UNION DISTINCT
SELECT DISTINCT a, b, c FROM table2
在做最终table1(a, b, c)之前,

可以轻松利用table2(a, b, c)UNION 上的索引。这应该通过减少数据的大小来加速最终的联合。第二个问题没有这个优势。

实际上,编写此查询的最有效方法可能是使用两个索引并使用:

SELECT DISTINCT a, b, c FROM table1 t1
UNION ALL
SELECT DISTINCT a, b, c
FROM table2 t2
WHERE NOT EXISTS (SELECT 1 FROM table1 t1 WHERE t2.a = t1.a and t2.b = t1.b and t2.c = t1.c)

这几乎是相同的,虽然它可能会稍微不同地处理第二个表中的NULL值。