Pengoptimuman Pertanyaan: Menangani Prestasi Pertanyaan Lambat dengan Ungkapan Tarikh
Apabila bekerja dengan SQL Server 2008, adalah penting untuk memahami kesan ungkapan tarikh pada prestasi pertanyaan. Pertimbangkan pertanyaan berikut:
Where FK.DT = CAST(DATEADD(m, DATEDIFF(m, 0, getdate()), 0) as DATE)
Pertanyaan ini berjalan dengan sangat perlahan jika dibandingkan dengan versi yang lebih mudah yang menggunakan literal rentetan:
Where FK.DT = '2013-05-01'
Punca Isu Prestasi
Prestasi yang perlahan disebabkan oleh pepijat dalam penganggar kardinaliti SQL Server. Pepijat menjejaskan ketepatan anggaran apabila menggunakan ungkapan tarikh yang kompleks. Dalam kes ini, ungkapan menilai hingga permulaan bulan semasa ('1786-06-01'), salah menganggar bilangan baris yang sepadan.
Penyelesaian
Untuk menangani isu prestasi, adalah disyorkan untuk menggunakan ungkapan berikut:
Where FK.DT = cast(getdate() + 1 - datepart(day, getdate()) as date)
Ungkapan ini mengira hari pertama bulan semasa, memberikan anggaran kardinaliti yang lebih tepat dan meningkatkan prestasi pertanyaan dengan ketara.
Selain itu, mendayakan bendera surih 4199 boleh menyelesaikan pepijat dan memberikan anggaran kardinaliti yang lebih tepat untuk ungkapan tarikh yang kompleks. Walau bagaimanapun, adalah penting untuk ambil perhatian bahawa ini mungkin mempunyai implikasi untuk pertanyaan lain yang bergantung pada anggaran kardinaliti yang betul.
Amalan Terbaik
Untuk prestasi pertanyaan yang optimum, pertimbangkan untuk menggunakan lebih mudah ungkapan tarikh atau menggunakan literal rentetan apabila boleh. Perlu diingat bahawa ungkapan tarikh yang kompleks boleh membawa kepada kardinaliti yang salah anggaran dan pengoptimuman pertanyaan kesan.
Atas ialah kandungan terperinci Mengapa Pertanyaan SQL Server 2008 Saya dengan Ungkapan Tarikh Begitu Lambat?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!