Secara umum, strategi pengindeksan saya akan seperti ini (saya menggunakan SQL Server secara eksklusif untuk saat ini - sesuaikan dengan sistem database Anda sendiri sesuai kebutuhan):
-
pilih yang baik kunci pengelompokan - bukan GUID, bukan
VARCHAR(250)
atau sesuatu - bagus kunci pengelompokan sempit, unik, stabil, terus meningkat - sesuatu sepertiINT IDENTITY
sempurna. Jadikan ini sebagai kunci utama cluster Anda -> memberi Anda indeks pertama Anda di atas tabel -
untuk setiap kolom yang digunakan sebagai kunci asing ke tabel lain - tambahkan index. Ini bisa berupa indeks kolom tunggal - atau mungkin indeks gabungan - apa pun yang paling cocok untuk kasus Anda. Kolom kunci asing harus menjadi pertama kolom dalam indeks itu (jika Anda menggunakan indeks gabungan) - jika tidak, manfaat untuk
JOIN
's atau untuk memeriksa integritas referensial tidak akan tersedia untuk sistem Anda
Dan itu saja untuk saat ini.
Kemudian:jalankan sistem Anda - amati, dan ukur - buat garis dasar. Apakah aplikasinya cukup cepat? Jika ya -> selesai - pulang dan nikmati waktu luang Anda.
Jika tidak:mulailah mengumpulkan data dan indikasi mengapa aplikasi tidak cukup cepat. Lihat misalnya hal-hal seperti DMV di SQL Server yang memberi tahu Anda tentang kueri berkinerja terburuk, atau indeks DMV yang hilang . Analisis itu. Lihat apa yang bisa Anda tingkatkan. Tambahkan satu indeks pada satu waktu dan sekali lagi:amati, ukur, bandingkan dengan baseline Anda.
Jika Anda memiliki peningkatan -> biarkan indeks itu di tempatnya dan pengukuran ini adalah dasar baru Anda. Bilas dan ulangi sampai Anda (dan pengguna Anda) puas dengan kinerja aplikasi (dan lalu pulanglah dan nikmati waktu istirahatmu).
Pengindeksan berlebihan di SQL Server bisa lebih buruk daripada tidak memiliki indeks. Jangan memulai dengan terlalu banyak indeks! Hanya menetapkan baik clustered PK dan foreign key nonclustered index - itu saja - lalu amati, ukur, optimalkan &ulangi siklus tersebut.