我的代码来自一位离开我公司的同事,我正试图更快地运行它。基本上,它执行以下操作:
SELECT DISTINCT
column1,
ISNULL(column2,0),
column3
FROM (
SELECT column1, column2, column3
FROM table1
INNER JOIN ...
WHERE ...
UNION
SELECT ALL column1, column2, column3
FROM table2
INNER JOIN ...
WHERE ...
) as DT
我正在检查一些网站,发现UNION子句只获得了区别值。使用distinct子句,执行时间为15秒,没有,3秒。 (查询有点复杂:/)。 所以在任何情况下,第一个查询的DISTINCT会有什么不同,或者我可以简单地删除它吗?
提前致谢!
---编辑谁可能会发现这个有用:) --- 问题出在UNION声明之后使用的ISNULL上。在我将其更改为在子查询中之后,性能与删除distinct不同。
答案 0 :(得分:0)
如果表中没有空值,则可以将其删除。在这种情况下,它们在语义上是等价的。但如果因为Distinct
添加空值而存在空值则不是这样,SELECT ALL
也是如此。