Peringatan dalam rencana kueri "Perkiraan Kardinalitas"

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

Permintaan di atas memiliki peringatan dalam paket permintaan.

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

Mengapa ada peringatan?

Bagaimana para pemeran dalam daftar bidang dapat memengaruhi perkiraan kardinalitas?

Mikael Eriksson
sumber

Jawaban:

12

Peringatan ini baru untuk SQL Server 2012.

Dari peringatan "Type Conversion in Expression ....." yang baru di SQL2012, hingga bising hingga penggunaan praktis

Saya mengerti apa yang kamu maksud. Meskipun saya setuju bahwa ini adalah noise dalam banyak kasus, ini adalah prioritas rendah bagi kami untuk memperbaikinya. Kami akan melihatnya jika kami mendapat lebih banyak umpan balik. Untuk saat ini saya telah menutup ini dengan desain.

Connect terbunuh dan sepertinya masalah aslinya tidak ditransfer ke UserVoice. Inilah masalah UserVoice yang berbeda tentang masalah yang sama, Jenis konversi dalam dapat memengaruhi CardinalityEstimate - Konversi / gips pada kolom yang dipilih

Saya akan memberikan jawaban yang membosankan sampai seseorang datang dengan yang lebih baik.

Mengapa ada peringatan?

Spekulasi di pihak saya.
Ada gips pada kolom yang digunakan di mana klausa yang membuat statistik kolom itu menarik. Perubahan tipe data membuat statistik menjadi tidak baik, jadi mari kita beri peringatan tentang hal itu jika nilai dari daftar bidang mungkin berakhir untuk digunakan di suatu tempat.

Bagaimana para pemeran dalam daftar bidang dapat memengaruhi perkiraan kardinalitas?

Tidak bisa kecuali itu adalah daftar bidang dalam tabel turunan.

Mikael Eriksson
sumber
Saya akan menambahkan kalimat berikut ke kalimat terakhir, atau kueri adalah definisi tampilan dan kueri akan memfilter pada kolom yang menunjukkan peringatan, yang dipertanyakan .
John Eisbrener