0

我这里有一个代码,来自一位离开我公司的同事,我正试图更快地运行它。基本上,它执行以下操作:

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 上。在我将其更改为子查询后,性能与删除不同的相同。

4

1 回答 1

0

如果表中没有空值,则可以将其删除。在这种情况下,它们在语义上是等价的。但如果有 null 值,则不是这样,因为Distinct添加了 null 值等等SELECT ALL

于 2013-08-28T19:45:22.420 回答