当Distinct和Group By的表现不同时?

The*_*ght 21 t-sql sql-server group-by distinct

我知道在简单查询中,Distinct和Group By的性能和执行计划几乎相同.

例如

SELECT Name FROM NamesTable GROUP BY Name
SELECT DISTINCT Name FROM NamesTable
Run Code Online (Sandbox Code Playgroud)

但我在某些情况下读过他们的表现会有所不同,例如在子查询中等等?

那么,你能举一些例子或解释一些他们的表现不同的场景吗?

非常感谢

Mik*_*son 16

如果在字段列表中包含计算值,您将看到执行计划中的差异.

select Value,
       getdate()
from YourTable
group by UnitID

select distinct
       Value,
       getdate()
from YourTable
Run Code Online (Sandbox Code Playgroud)

group by查询汇总它计算的标值之前.该distinct查询计算的总前的标量值.

  • @William - 结果不同.我看到的最明显的性能问题是当你使用`for xml`技巧进行字符串连接时.我已经看到使用`distinct`的版本和使用`group by`的版本和`group by`版本要快得多.但即使这个简单的查询在执行超过500000行时生成40个组也显示出性能差异.对我来说,`group by`需要80 ms,而'distinct`需要105 ms. (2认同)

The*_*ght 7

这里有两个例子,一个用于产生不同的结果,另一个用于不同的性能:

产生不同性能的例子

第二个例子:

产生不同结果的例子