Avviso nel piano di query "Stima della cardinalità"


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

La query sopra ha un avviso nel piano di query.

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

Perché ha l'avvertimento?

In che modo un cast nell'elenco dei campi può influire sulla stima della cardinalità?

Risposte:


12

Questo avviso era nuovo per SQL Server 2012.

Dal nuovo avviso "Conversione di tipi in espressione ....." in SQL2012, da rumoroso a un uso pratico

Capisco cosa intendi. Anche se concordo sul fatto che questo è rumore nella maggior parte dei casi, è una priorità bassa per noi risolvere. Lo vedremo se avremo più feedback. Per ora ho chiuso questo dal design.

Connect è stato interrotto e non sembra che il problema originale sia stato trasferito a UserVoice. Ecco un diverso problema UserVoice sullo stesso problema, la conversione del tipo in può influire su CardinalityEstimate - Converti / cast su colonne selezionate

Fornirò la risposta noiosa fino a quando qualcuno ne avrà una migliore.

Perché ha l'avvertimento?

La speculazione da parte mia.
C'è un cast su una colonna che viene utilizzato nella clausola where che rende interessanti le statistiche di quella colonna. Una modifica del tipo di dati rende le statistiche inutili, quindi avvisiamo nel caso in cui il valore dall'elenco dei campi possa finire per essere utilizzato da qualche parte.

In che modo un cast nell'elenco dei campi può influire sulla stima della cardinalità?

Non può a meno che non sia l'elenco dei campi in una tabella derivata.


Vorrei aggiungere quanto segue all'ultima frase, oppure la query è una definizione di vista e le query verranno filtrate sulla colonna che mostra l'avviso, in questione .
John Eisbrener,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.