查询计划“基数估计”中的警告


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

上面的查询在查询计划中有一个警告。

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

为什么会有警告?

字段列表中的类型转换如何影响基数估计?

Answers:


12

此警告是SQL Server 2012的新警告。

SQL2012中的新“表达式中的类型转换.....”警告到嘈杂的实际使用

我明白你的意思了。虽然我同意在大多数情况下这是噪音,但我们修复此问题的优先级较低。如果我们获得更多反馈,我们将进行研究。目前,我已经关闭了此设计。

Connect被杀死,原始问题似乎没有转移到UserVoice。这是关于同一问题的另一个UserVoice问题,类型转换可能会影响CardinalityEstimate-在选定列上进行转换/广播

在有人提出更好的答案之前,我会提供无聊的答案。

为什么会有警告?

我的猜测。
在where子句中使用的列上有强制类型转换,使该列的统计数据变得有趣。数据类型的更改会使统计数据不好,因此请警告一下,以防字段列表中的值最终可能在某个地方使用。

字段列表中的类型转换如何影响基数估计?

除非它是派生表中的字段列表,否则不能这样做。


我会将以下内容添加到最后一句,否则查询将是视图定义,查询将在显示警告的列中进行过滤(有疑问)
John Eisbrener
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.