Rumah >pangkalan data >tutorial mysql >Mengapa Pertanyaan SQL Server 2008 Saya Lambat Apabila Menggunakan Ungkapan DateTime dalam Klausa WHERE?
Pertanyaan yang mengalami kelembapan ketara apabila menggunakan ungkapan tarikh dalam klausa WHERE berbanding dengan nilai literal rentetan menimbulkan dilema prestasi pertanyaan. Mari kita mendalami isu ini dan dapatkan penyelesaian.
Jurang prestasi timbul disebabkan oleh pepijat dalam SQL Server 2008, yang menjejaskan anggaran kardinaliti apabila menggunakan ungkapan tarikh dalam klausa MANA. Pepijat mengakibatkan anggaran bilangan baris yang sepadan yang salah.
Untuk memintas pepijat ini, pertanyaan dioptimumkan berikut dicadangkan:
Where FK.DT = cast(getdate() + 1 - datepart(day, getdate()) as date)
Ungkapan ini mengembalikan permulaan bulan semasa, yang mungkin merupakan kriteria pemilihan yang diingini dalam hal ini senario.
Sebagai alternatif, bendera surih 4199 boleh didayakan untuk memaksa anggaran kardinaliti yang tepat. Dengan bendera surih 4199 dihidupkan, pertanyaan berikut juga akan menghasilkan pelan yang diingini:
Where FK.DT = CAST(DATEADD(m, DATEDIFF(m, 0, getdate()), 0) as DATE) OPTION (QUERYTRACEON 4199)
Sebagai contoh, dengan jadual yang dipanggil FK mengandungi lajur yang dipanggil DT dengan nilai yang mewakili permulaan setiap bulan, dua pertanyaan berikut menunjukkan percanggahan prestasi:
-- Slow due to incorrect cardinality estimates SELECT COUNT(Filler) FROM FK WHERE FK.DT = CAST(DATEADD(m, DATEDIFF(m, 0, getdate()), 0) AS DATE) -- Fast due to accurate cardinality estimates with trace flag 4199 SELECT COUNT(Filler) FROM FK WHERE FK.DT = CAST(DATEADD(m, DATEDIFF(m, 0, getdate()), 0) AS DATE) OPTION (QUERYTRACEON 4199)
Dengan bendera surih 4199 didayakan, pertanyaan kedua akan menghasilkan masa pelaksanaan yang jauh lebih pantas disebabkan oleh pelan pertanyaan yang dioptimumkan.
Atas ialah kandungan terperinci Mengapa Pertanyaan SQL Server 2008 Saya Lambat Apabila Menggunakan Ungkapan DateTime dalam Klausa WHERE?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!