Предупреждение в плане запроса «Оценка мощности»

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>

Почему у него есть предупреждение?

Как составление в списке полей может повлиять на оценку количества элементов?

Микаэль Эрикссон
источник

Ответы:

12

Это предупреждение было новым для SQL Server 2012.

От нового предупреждения «Преобразование типов в выражении .....» в SQL2012 до шумного и практического использования

Я понимаю что ты имеешь ввиду. Хотя я согласен с тем, что в большинстве случаев это шум, для нас это не слишком важно. Мы посмотрим на это, если получим больше отзывов. Пока я закрыл это по замыслу.

Connect был убит, и не похоже, что исходная проблема была передана UserVoice. Вот другая проблема UserVoice, связанная с той же проблемой. Преобразование типов может повлиять на CardinalityEstimate - преобразование / приведение к выбранным столбцам.

Я буду давать скучный ответ, пока кто-нибудь не придет с лучшим.

Почему у него есть предупреждение?

Спекуляция с моей стороны.
Существует столбец, который используется в предложении where, что делает статистику этого столбца интересной. Изменение типа данных делает статистику бесполезной, поэтому давайте предупреждаем об этом в случае, если значение из списка полей может где-то использоваться.

Как составление в списке полей может повлиять на оценку количества элементов?

Не может, если это не список полей в производной таблице.

Микаэль Эрикссон
источник
Я добавил бы следующее к последнему предложению, или запрос является определением представления, и запросы будут фильтроваться в столбце, показывающем соответствующее предупреждение .
Джон Айсбренер,