Alguém pode explicar a situação abaixo, onde dois valores aparentemente iguais não são reduzidos DISTINCT
?
A consulta acima éSELECT DISTINCT name FROM master.sys.dm_os_spinlock_stats where name = 'SBS_UCS_DISPATCH';
O equivalente SELECT name FROM master.sys.dm_os_spinlock_stats where name = 'SBS_UCS_DISPATCH' GROUP BY name;
também faz o mesmo e a adição HAVING COUNT(1) > 1
não produz as linhas.
@@VERSION
é Microsoft SQL Server 2019 (RTM-CU13) (KB5005679) - 15.0.4178.1 (X64) 23 de setembro de 2021 16:47:49 Copyright (C) 2019 Microsoft Corporation Enterprise Edition: Licenciamento baseado em núcleo (64 bits) no Windows Server 2016 Padrão 10.0 (Construção 14393: )
Parece que o
DISTINCT
é otimizado durante a simplificação.dá
Então o
GbAgg
desaparece na Árvore SimplificadaPresumo que haja alguns metadados indicando
name
que são exclusivos, apesar dos resultados da consulta em contrário, mas não consigo ver como provar isso.Uma maneira de contornar isso é a seguinte.
Em geral, mesmo que
name
fosse único em um agrupamento, ainda poderia ter duplicatas comcollate
semântica diferente. O agrupamento de colunas original para mim éLatin1_General_CI_AS
para que isso não altere a natureza sensível a acentos insensíveis a maiúsculas e minúsculas, mas é o suficiente para preservar oGbAgg
no plano.Retorna o seguinte na minha instância dev
Portanto,
SBS_UCS_DISPATCH
não é o único a ser duplicado.Para mim, os valores nas outras colunas são todos
0
para isso. Portanto, não estou claro se as linhas inteiras serão duplicadas ou não no caso de esses bloqueios de rotação serem encontrados - ou se eles precisariam ser agregados.Os tipos afetados não são aqueles documentados além de " para uso interno " de qualquer maneira.