Попередження в плані запитів "Оцінка кардинальності"


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 - Перетворити / передати на вибрані стовпці

Я дам нудну відповідь, поки хтось не прийде разом з кращою.

Чому воно має попередження?

Спекуляції з мого боку.
Існує трансляція стовпця, який використовується в пункті, де роблять статистику цього стовпця цікавою. Зміна типу даних робить статистику непоганою, тому дозволяє попередити про це у випадку, якщо значення зі списку полів може виявитись десь використаним.

Як може відзначення списку полів вплинути на оцінку кардинальності?

Це не може, якщо це не список полів у похідній таблиці.


Я б додав наступне речення до останнього речення, або запит є визначенням перегляду, і запити будуть фільтруватися на стовпчику, де відображається попередження .
Джон Ейсбренер
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.