Aviso no plano de consulta "Estimativa de cardinalidade"

17
create table T(ID int identity primary key)
insert into T default values
insert into T default values

go

select cast(ID as varchar(10)) as ID
from T
where ID = 1

A consulta acima possui um aviso no plano de consulta.

<Warnings>
  <PlanAffectingConvert ConvertIssue="Cardinality Estimate" Expression="CONVERT(varchar(10),[xx].[dbo].[T].[ID],0)" />
</Warnings>

Por que tem o aviso?

Como um elenco na lista de campos pode afetar a estimativa de cardinalidade?

Mikael Eriksson
fonte

Respostas:

12

Este aviso era novo para o SQL Server 2012.

Do novo aviso "Conversão de tipo na expressão ....." no SQL2012, ao barulhento e ao uso prático

Eu vejo o que você quer dizer. Embora eu concorde que isso seja ruído na maioria dos casos, é de baixa prioridade para nós corrigirmos. Iremos analisar se obtivermos mais feedback. Por enquanto eu fechei isso por design.

O Connect foi interrompido e não parece que o problema original foi transferido para o UserVoice. Aqui está um problema diferente do UserVoice sobre o mesmo problema. A conversão de tipo pode afetar CardinalityEstimate - Converter / converter em colunas selecionadas

Vou fornecer a resposta chata até que alguém venha com uma melhor.

Por que tem o aviso?

Especulação da minha parte.
Há uma conversão em uma coluna usada na cláusula where que torna interessantes as estatísticas dessa coluna. Uma mudança no tipo de dados não torna as estatísticas boas, então vamos avisar sobre isso, caso o valor da lista de campos possa acabar sendo usado em algum lugar.

Como um elenco na lista de campos pode afetar a estimativa de cardinalidade?

Não pode, a menos que seja a lista de campos em uma tabela derivada.

Mikael Eriksson
fonte
Eu acrescentaria o seguinte à última frase, ou a consulta é uma definição de exibição e as consultas serão filtradas na coluna que mostra o aviso, em questão .
John Eisbrener 05/03