将MAX()添加到所有字段以清除重复行是否有任何特殊缺点?

时间:2017-08-15 12:56:44

标签: sql sql-server performance

我正在使用SQL Server 2016.我有一个包含30多列的大表。当我从中提取所需的数据时,偶尔会有重复的行。我想这是因为我没有使用的其中一个列存在一些差异,但就我的目的而言,数据总是相同的。我所做的就是改变

SELECT
    [reference], [name], [postcode], [type], [amount]
FROM
    [my table]

SELECT
    [reference], MAX([name]), MAX([postcode]), MAX([type]), MAX([amount])
FROM
    [my table]
GROUP BY 
    [reference]

这可能会导致任何问题吗?是否会大大增加处理时间或潜在错误?

1 个答案:

答案 0 :(得分:3)

你的方法很好。更典型的方法是:

SELECT DISTINCT [reference], [name], [postcode], [type], [amount]
FROM [my table] t;

我希望它具有与GROUP BY相同的性能,但您可以查看。有时,这可能会有不同的优化。

另一种方法是:

SELECT [reference], [name], [postcode], [type], [amount]
FROM (SELECT t.*,
             ROW_NUMBER() OVER (PARTITION BY [reference], [name], [postcode], [type], [amount]
                                ORDER BY (SELECT NULL)
                               ) as seqnum
      FROM [my table] t
     ) t
WHERE seqnum = 1;

您可能希望测试并查看哪种效果更好。