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>
为什么会有警告?
字段列表中的演员如何影响基数估计?
此警告是 SQL Server 2012 的新警告。
从 SQL2012 中的新“表达式中的类型转换.....”警告,到嘈杂到实际使用
Connect 已被终止,看起来原始问题并未转移到 UserVoice。这是关于同一问题的不同 UserVoice 问题,类型转换可能会影响 CardinalityEstimate - 在选定列上转换/转换
在有人提出更好的答案之前,我将提供无聊的答案。
我的猜测。
在 where 子句中使用的列上有一个强制转换,它使该列的统计信息变得有趣。数据类型的更改使统计数据变得不好,所以让我们警告一下,以防字段列表中的值最终可能会在某处使用。
它不能,除非它是派生表中的字段列表。