KB2481274-memperbaiki: kueri yang menggunakan fungsi DATEDIFF mungkin berjalan lambat di SQL Server 2005 atau di SQL Server 2008 atau di SQL Server 2008 R2

Microsoft mendistribusikan Microsoft SQL Server 2005 atau Microsoft SQL Server 2008 atau SQL 2008 R2 Fixes sebagai satu file yang dapat diunduh. Karena perbaikan bersifat kumulatif, setiap Edaran baru berisi semua hotfix dan semua perbaikan keamanan yang disertakan dengan Microsoft SQL Server 2005 sebelumnya atau Microsoft SQL Server 2008 atau SQL 2008 R2 Fix Release

Gejala

Misalnya, Anda menjalankan kueri pada contoh Microsoft SQL Server 2005 atau Microsoft SQL Server 2008 atau Microsoft SQL Server 2008 R2 yang memenuhi ketentuan berikut ini:

  • Kueri berisi operator relasional. Misalnya, operator kurang dari (<).

  • Ada fungsi DateDiff di Operand operator relasional.

Dalam situasi ini, SQL Server mungkin memilih paket kueri yang tidak optimal untuk menjalankan kueri ini. Oleh karena itu, kueri mungkin berjalan lambat.

Penyebab

Masalah ini terjadi karena Pengoptimal SQL Server meremehkan jumlah baris yang akan dikembalikan saat Anda menggunakan fungsi DateDiff .

Pemecahan Masalah

Informasi pembaruan kumulatif

SQL Server 2005 Paket Layanan 3

Perbaikan untuk masalah ini pertama kali dirilis dalam pembaruan kumulatif 15 untuk SQL Server 2005 Service Pack 3. Untuk informasi selengkapnya tentang paket pembaruan kumulatif ini, klik nomor artikel berikut ini untuk menampilkan artikel di Basis Pengetahuan Microsoft:

2507766 Paket pembaruan kumulatif 15 untuk SQL Server 2005 Service Pack 3Catatan Karena Build bersifat kumulatif, setiap rilis perbaikan baru berisi semua hotfix dan semua perbaikan keamanan yang disertakan dengan rilis perbaikan SQL Server 2005 sebelumnya. Microsoft menganjurkan agar Anda mempertimbangkan penerapan rilis perbaikan terbaru yang berisi hotfix ini. Untuk informasi selengkapnya, klik nomor artikel berikut untuk melihat artikel di Pangkalan Pengetahuan Microsoft:

960598 Build 2005 SQL Server yang dirilis setelah SQL Server 2005 Service Pack 3 dirilis Hotfix Microsoft SQL Server 2005 dibuat untuk paket layanan SQL Server tertentu. Anda harus menerapkan perbaikan terbaru SQL Server 2005 Service Pack 3 ke instalasi SQL Server 2005 Service Pack 3. Secara default, setiap hotfix yang disediakan dalam paket layanan SQL Server disertakan dalam paket layanan SQL Server berikutnya.

SQL Server 2005 Service Pack 4

Perbaikan untuk masalah ini pertama kali dirilis dalam pembaruan kumulatif 2 untuk SQL Server 2005 Service Pack 4. Untuk informasi selengkapnya tentang paket pembaruan kumulatif ini, klik nomor artikel berikut ini untuk menampilkan artikel di Basis Pengetahuan Microsoft:

2489409 Paket pembaruan kumulatif 2 untuk SQL Server 2005 Service Pack 4Catatan Karena Build bersifat kumulatif, setiap rilis perbaikan baru berisi semua hotfix dan semua perbaikan keamanan yang disertakan dengan rilis perbaikan SQL Server 2005 sebelumnya. Microsoft menganjurkan agar Anda mempertimbangkan penerapan rilis perbaikan terbaru yang berisi hotfix ini. Untuk informasi selengkapnya, klik nomor artikel berikut untuk melihat artikel di Pangkalan Pengetahuan Microsoft:

2485757 Build 2005 SQL Server yang dirilis setelah SQL Server 2005 Service Pack 4 dirilis Hotfix Microsoft SQL Server 2005 dibuat untuk paket layanan SQL Server tertentu. Anda harus menerapkan hotfix SQL Server 2005 Service Pack 4 ke instalasi SQL Server 2005 Service Pack 4. Secara default, setiap hotfix yang disediakan dalam paket layanan SQL Server disertakan dalam paket layanan SQL Server berikutnya.

SQL Server 2008 Service Pack 1

Perbaikan untuk masalah ini pertama kali dirilis dalam pembaruan kumulatif 13 untuk SQL Server 2008 Service Pack 1. Untuk informasi selengkapnya tentang paket pembaruan kumulatif ini, klik nomor artikel berikut ini untuk menampilkan artikel di Basis Pengetahuan Microsoft:

2497673 Paket pembaruan kumulatif 13 untuk SQL Server 2008 Service Pack 1Catatan Karena Build bersifat kumulatif, setiap rilis perbaikan baru berisi semua hotfix dan semua perbaikan keamanan yang disertakan dengan rilis perbaikan SQL Server 2008 sebelumnya. Microsoft menganjurkan agar Anda mempertimbangkan penerapan rilis perbaikan terbaru yang berisi hotfix ini. Untuk informasi selengkapnya, klik nomor artikel berikut untuk melihat artikel di Pangkalan Pengetahuan Microsoft:

970365 Build 2008 SQL Server yang dirilis setelah SQL Server 2008 Service Pack 1 dirilis Hotfix Microsoft SQL Server 2008 dibuat untuk paket layanan SQL Server tertentu. Anda harus menerapkan perbaikan terbaru SQL Server 2008 Service Pack 1 ke instalasi SQL Server 2008 Service Pack 1. Secara default, setiap hotfix yang disediakan dalam paket layanan SQL Server disertakan dalam paket layanan SQL Server berikutnya.

SQL Server 2008 Service Pack 2

Perbaikan untuk masalah ini pertama kali dirilis dalam pembaruan kumulatif 3 untuk SQL Server 2008 Service Pack 2. Untuk informasi selengkapnya tentang paket pembaruan kumulatif ini, klik nomor artikel berikut ini untuk menampilkan artikel di Basis Pengetahuan Microsoft:

2498535 Paket pembaruan kumulatif 3 untuk SQL Server 2008 Service Pack 2Catatan Karena Build bersifat kumulatif, setiap rilis perbaikan baru berisi semua hotfix dan semua perbaikan keamanan yang disertakan dengan rilis perbaikan SQL Server 2008 sebelumnya. Microsoft menganjurkan agar Anda mempertimbangkan penerapan rilis perbaikan terbaru yang berisi hotfix ini. Untuk informasi selengkapnya, klik nomor artikel berikut untuk melihat artikel di Pangkalan Pengetahuan Microsoft:

2402659 Build 2008 SQL Server yang dirilis setelah SQL Server 2008 Service Pack 2 dirilis Hotfix Microsoft SQL Server 2008 dibuat untuk paket layanan SQL Server tertentu. Anda harus menerapkan perbaikan terbaru SQL Server 2008 Service Pack 2 ke instalasi SQL Server 2008 Service Pack 2. Secara default, setiap hotfix yang disediakan dalam paket layanan SQL Server disertakan dalam paket layanan SQL Server berikutnya.

SQL Server 2008 R2 Paket Layanan 1

Perbaikan untuk masalah ini pertama kali dirilis dalam pembaruan kumulatif 1 untuk SQL Server 2008 R2 Service Pack 1. Untuk informasi selengkapnya tentang cara mendapatkan paket pembaruan kumulatif ini, klik nomor artikel berikut ini untuk menampilkan artikel di Basis Pengetahuan Microsoft:

2544793 Paket pembaruan kumulatif 1 untuk SQL Server 2008 R2 Paket Layanan 1Catatan Karena Build bersifat kumulatif, setiap rilis perbaikan baru berisi semua hotfix dan semua perbaikan keamanan yang disertakan dengan rilis perbaikan SQL Server 2008 R2 sebelumnya. Kami menyarankan agar Anda mempertimbangkan untuk menerapkan rilis perbaikan terbaru yang berisi hotfix ini. Untuk informasi selengkapnya, klik nomor artikel berikut untuk melihat artikel di Pangkalan Pengetahuan Microsoft:

2567616 Build SQL Server 2008 R2 yang dirilis setelah SQL Server 2008 R2 Service Pack 1 dirilis

SQL Server 2008 R2

Perbaikan untuk masalah ini pertama kali dirilis dalam pembaruan kumulatif 7. Untuk informasi selengkapnya tentang cara mendapatkan paket pembaruan kumulatif ini untuk SQL Server 2008 R2, klik nomor artikel berikut ini untuk menampilkan artikel di Basis Pengetahuan Microsoft:

2507770 Paket pembaruan kumulatif 7 untuk SQL Server 2008 R2 Catatan Karena Build bersifat kumulatif, setiap rilis perbaikan baru berisi semua hotfix dan semua perbaikan keamanan yang disertakan dengan rilis perbaikan SQL Server 2008 R2 sebelumnya. Kami menyarankan agar Anda mempertimbangkan untuk menerapkan rilis perbaikan terbaru yang berisi hotfix ini. Untuk informasi selengkapnya, klik nomor artikel berikut untuk melihat artikel di Pangkalan Pengetahuan Microsoft:

981356 Build SQL Server 2008 R2 yang dirilis setelah SQL Server 2008 R2 dirilis

Status

Microsoft telah mengonfirmasi bahwa ini adalah masalah pada produk Microsoft yang tercantum di bagian "Berlaku untuk".

Penyelesaian Masalah

Untuk mengatasi masalah ini, tulis ulang kueri agar paket kueri tidak menggunakan fungsi DateDiff dalam predikat. Misalnya, hal berikut ini mungkin berjalan lambat:create procedure proc_test @date datetimeasselect COUNT (*) from t where c1 <DATEADD(mm, DATEDIFF(mm,0,dateadd(month, -6,@date)), 0) Namun, Anda bisa menulis ulang kueri sebagai berikut untuk mengatasi masalah ini:create procedure proc_test2 @date datetimeasdeclare @datestr nvarchar(50), @sqlstr nvarchar(1024)set @datestr = CAST (DATEADD(mm, DATEDIFF(mm,0,dateadd(month, -6,@date)), 0) as nvarchar(50))set @sqlstr ='select COUNT (*) from t where c1 < ''' + @datestr + ''''exec (@sqlstr)

Referensi

Untuk informasi selengkapnya tentang model pelayanan tambahan untuk SQL Server, klik nomor artikel berikut ini untuk menampilkan artikel di Basis Pengetahuan Microsoft:

935897 Model Layanan inkremental tersedia dari tim SQL Server untuk mengirim hotfix untuk masalah yang dilaporkanUntuk informasi selengkapnya tentang skema penamaan untuk pembaruan SQL Server, klik nomor artikel berikut ini untuk menampilkan artikel di Basis Pengetahuan Microsoft:

822499 Skema penamaan baru untuk paket pembaruan perangkat lunak Microsoft SQL ServerUntuk informasi selengkapnya tentang terminologi pembaruan perangkat lunak, klik nomor artikel berikut ini untuk menampilkan artikel di Basis Pengetahuan Microsoft:

824684 Deskripsi tentang terminologi standar yang digunakan untuk menjelaskan pembaruan perangkat lunak Microsoft

Perlu bantuan lainnya?

Kembangkan keterampilan Anda
Jelajahi pelatihan
Dapatkan fitur baru terlebih dahulu
Gabung Microsoft Insider

Apakah informasi ini bermanfaat?

Terima kasih atas umpan balik Anda!

Terima kasih atas umpan balik Anda! Sepertinya menghubungkan Anda ke salah satu agen dukungan Office kami akan sangat membantu.

×