谁能解释下面的情况,其中两个看似相等的值没有减少DISTINCT
?
上面的查询是SELECT DISTINCT name FROM master.sys.dm_os_spinlock_stats where name = 'SBS_UCS_DISPATCH';
等效方法SELECT name FROM master.sys.dm_os_spinlock_stats where name = 'SBS_UCS_DISPATCH' GROUP BY name;
也执行相同的操作,并且添加HAVING COUNT(1) > 1
不会产生行。
@@VERSION
是Microsoft SQL Server 2019 (RTM-CU13) (KB5005679) - 15.0.4178.1 (X64) 2021 年 9 月 23 日 16:47:49 版权所有 (C) 2019 Microsoft Corporation 企业版:Windows Server 上基于核心的许可(64 位) 2016 标准 10.0(内部版本 14393:)
看起来
DISTINCT
在简化过程中得到了优化。给予
然后
GbAgg
消失在简化树中我假设有一些元数据表明
name
是唯一的,尽管查询结果相反,但我不知道如何证明这一点。解决此问题的一种方法如下。
一般来说,即使
name
在一种排序规则下是唯一的,那么它仍然可能具有不同collate
语义的重复项。对我来说,原始的列排序规则是Latin1_General_CI_AS
这样的,这不会改变不区分大小写、区分重音的性质,但足以保留GbAgg
计划中的内容。在我的开发实例上返回以下内容
因此
SBS_UCS_DISPATCH
,并不是唯一一个被复制的人。对我来说,其他列中的值都是
0
这些。因此,我不清楚如果遇到这些自旋锁,整个行是否会被重复,或者是否需要聚合它们。无论如何,受影响的类型不是除“内部使用”之外记录的类型。