web-dev-qa-db-ja.com

クエリプラン「カーディナリティ推定」の警告

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

上記のクエリのクエリプランには警告があります。

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

なぜ警告があるのですか?

フィールドリストのキャストは、カーディナリティの推定にどのように影響しますか?

17
Mikael Eriksson

この警告はSQL Server 2012の新機能です。

から SQL2012の新しい「式の変換...」の警告、実用にうるさい

どういう意味かわかります。これはほとんどの場合ノイズであることに同意しますが、修正することは優先度が低いです。より多くのフィードバックが得られたら、それを検討します。今のところ、私はこれを意図的に閉じました。

Connectが強制終了され、元の問題がUserVoiceに転送されたようではありません。同じ問題に関するUserVoiceの別の問題は次のとおりです 型変換はCardinalityEstimateに影響する可能性があります-選択した列での変換/キャスト

誰かがより良いものと一緒になるまで、私は退屈な答えを提供します。

なぜ警告があるのですか?

私の側の推測。
where句で使用される列にキャストがあり、その列の統計が興味深いものになっています。データ型を変更すると統計が悪くなるため、フィールドリストの値がどこかで使用される可能性がある場合は、そのことについて警告します。

フィールドリストのキャストは、カーディナリティの推定にどのように影響しますか?

派生テーブルのフィールドリストでない限り、それはできません。

12
Mikael Eriksson