Kami baru-baru ini mengalami masalah titik kritis dan beberapa permintaan laporan kami yang digunakan untuk menyelesaikan eksekusi dalam beberapa detik sekarang membutuhkan waktu lebih dari 2 menit karena pengoptimal kueri mengabaikan indeks non-clustered pada kolom pencarian. Contoh kueri di bawah ini:
select top 100 *
from [dbo].[t_Call]
where ID > 0
and throwtime between '3/20/2014 7:00:00 AM' and '3/24/2014 6:59:59 AM'
order by id
The ID
kolom berkerumun Indeks dan Throwtime
memiliki indeks nonclustered. Dalam hal ini, kami perhatikan bahwa pemesanan dengan throwtime
alih-alih ID
mengubah rencana kueri dan indeks nonclustered digunakan. Kami juga berencana untuk mengarsipkan beberapa data lama (saat ini memiliki 20 juta baris !!). Tetapi membuat perubahan dalam aplikasi ini akan memakan waktu dan saya perlu menemukan cara untuk membuat laporan berjalan cukup cepat, tanpa membuat perubahan pada tingkat aplikasi (oh well, begitulah hidup!).
Masukkan panduan paket. Saya membuat panduan rencana di bawah ini dengan petunjuk kueri indeks yang tidak bercabang dan untuk beberapa alasan, indeks yang tidak bercabang masih tidak digunakan. Apakah saya melewatkan sesuatu?
EXEC sp_create_plan_guide
@name = N'[prod2reports_callthrowtime]',
@stmt = N'select top 100 *
from [dbo] . [t_Call]
where ID > @0 and @1 < = ThrowTime and ThrowTime < = @2 order by ID',
@type = N'SQL',
@module_or_batch = N'select top 100 *
from [dbo] . [t_Call]
where ID > @0 and @1 < = ThrowTime and ThrowTime < = @2 order by ID',
@params = N'@0 int, @1 datetime, @2 datetime',
@hints = N'OPTION (TABLE HINT( [dbo] . [t_Call],
INDEX(IDX_NC_t_call_ThrowtimeProblemCodes)))'
GO
sumber
throwtime between '3/20/2014 7:00:00 AM' and '3/24/2014 6:59:59 AM'
kethrowtime >= '20140320 07:00' AND throwtime < '20140324 07:00';
- silakan lihat posting blog ini dan juga yang ini .Jawaban:
Kueri harus cocok dengan PERSIS, termasuk spasi. Saya sarankan Anda mendapatkan kueri dari cache, dan membuatnya dari itu daripada memasukkannya dengan cara lain.
sumber
BACA ARTIKEL TERKAIT LAGI
Menulis panduan rencana untuk memaksa penggunaan indeks Anda hampir pasti bukan yang Anda inginkan, karena akan memaksa pencarian bookmark yang tidak efisien. Menurut artikel Anda, solusi yang tepat untuk kinerja paling efisien dari kueri ini adalah mengubah indeks Anda menjadi indeks non-clustered yang meliputi , dengan kata lain, tambahkan semua kolom dari tabel Anda ke indeks, atau (lebih disukai ) cukup tambahkan kolom yang Anda butuhkan untuk kueri ini, dan kemudian ubah pilih untuk hanya menarik kolom itu.
sumber