Avertissement dans le plan de requête «Estimation de 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 requête ci-dessus a un avertissement dans le plan de requête.

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

Pourquoi a-t-il l'avertissement?

Comment un cast dans la liste des champs peut-il affecter l'estimation de la cardinalité?

Mikael Eriksson
la source

Réponses:

12

Cet avertissement était nouveau pour SQL Server 2012.

Du nouvel avertissement "Conversion de type dans l'expression ....." dans SQL2012, à l'utilisation bruyante à pratique

Je vois ce que tu veux dire. Bien que je convienne que c'est du bruit dans la plupart des cas, il est peu prioritaire pour nous de le corriger. Nous l'examinerons si nous obtenons plus de commentaires. Pour l'instant, je l'ai fermé par conception.

Connect a été tué et il ne semble pas que le problème d'origine ait été transféré à UserVoice. Voici un autre problème UserVoice sur le même problème, la conversion de type dans peut affecter CardinalityEstimate - Convertir / convertir sur les colonnes sélectionnées

Je fournirai la réponse ennuyeuse jusqu'à ce que quelqu'un vienne avec une meilleure réponse.

Pourquoi a-t-il l'avertissement?

Des spéculations de ma part.
Il y a un cast sur une colonne qui est utilisée dans la clause where qui rend les statistiques de cette colonne intéressantes. Un changement de type de données rend les statistiques inutiles, permet donc d'avertir à ce sujet au cas où la valeur de la liste de champs pourrait finir par être utilisée quelque part.

Comment un cast dans la liste des champs peut-il affecter l'estimation de la cardinalité?

Il ne peut pas sauf s'il s'agit de la liste des champs dans une table dérivée.

Mikael Eriksson
la source
J'ajouterais ce qui suit à la dernière phrase, ou la requête est une définition de vue et les requêtes filtreront sur la colonne affichant l'avertissement, en question .
John Eisbrener