Saat melihat rencana eksekusi yang sebenarnya, itu menunjukkan indeks yang hilang meskipun kueri membutuhkan waktu kurang dari 1 detik.
SELECT
Account.AccountID,
Account.Name
FROM
account
LEFT OUTER JOIN accountfeaturesetting afs
ON afs.accountid = account.accountid
and afs.featureid = 'Schedules'
and
afs.settingid = 'EditReasons'
WHERE
ISNULL(afs.Value, '0') = '0'
AND EXISTS
(SELECT 1 FROM program WHERE program.AccountID = account.AccountID
AND program.Active = 1
AND (program.ScheduleEditReasonFlags <> 0
OR program.ScheduleEditReasonFields <> 0))
AND account.IsMaster = 0
AND account.BeginDate IS NOT NULL
Rencana eksekusi menunjukkan:
CREATE NONCLUSTERED INDEX [<Name of Missing Index, sysname,>]
ON [dbo].[Account] ([IsMaster],[BeginDate])
INCLUDE ([AccountID],[Name])
Apakah kita perlu membuat indeks meskipun permintaan hanya membutuhkan waktu 1 detik? Atas dasar apa suatu indeks harus dibuat?
Saya akan menjalankan kueri ini sebagai pekerjaan harian.
Jawaban:
Anda tidak perlu menambahkan indeks sekarang. Semua pesan "indeks hilang" artinya ini mungkin bermanfaat. Mungkin tidak jujur, atau mungkin ada indeks yang lebih membantu.
Seperti kapan Anda perlu menambahkan indeks baru? Baiklah katakanlah Anda memiliki 100 baris di tabel akun tetapi belum benar-benar digunakan. Dalam beberapa bulan Anda mencapai 10.000 baris dan permintaan sekarang mengambil setengah jam atau lebih. Pada titik itu Anda dapat mempertimbangkan untuk menambahkan indeks. Dan ketika saya katakan pertimbangkan, maksud saya mengujinya di lingkungan pengujian dan melihat apakah itu benar-benar meningkatkan keadaan.
Pertimbangan lain termasuk:
sumber