Ikhtisar Indeks SQL Server
Ketika berbicara tentang penyetelan kinerja SQL Server dan peningkatan kueri, hal pertama yang harus dipertimbangkan adalah Indeks SQL Server. Ini berfungsi untuk mempercepat pembacaan data dari tabel yang mendasarinya dengan menyediakan akses cepat ke baris yang diminta. Dengan demikian, tidak perlu memindai semua catatan tabel.
Indeks SQL Server menyediakan kemampuan pencarian cepat tersebut karena struktur indeks B-Tree. Struktur ini memungkinkan untuk berpindah melalui baris tabel berdasarkan kunci indeks dengan cepat dan mengambil catatan yang diminta sekaligus. Tidak perlu membaca seluruh tabel.
Jenis indeks SQL Server
Di antara tipe utama, kami memperhatikan indeks berkerumun dan tidak berkerumun.
Indeks Tergugus mengurutkan data aktual di halaman data sesuai dengan nilai kunci indeks berkerumun. Ini menyimpan data pada tingkat 'daun' indeks, memastikan kemungkinan untuk membuat hanya satu indeks berkerumun di setiap tabel. Indeks berkerumun dibuat secara otomatis ketika batasan Kunci Utama muncul di tabel heap.
Indeks yang tidak berkerumun berisi nilai kunci indeks dan penunjuk ke kolom baris lainnya di tabel utama. Ini adalah level 'daun' dari indeks, dengan kemampuan untuk membuat hingga 999 indeks non-cluster di setiap tabel.
Jika tabel Anda tidak memiliki indeks berkerumun yang dibuat di atasnya, tabel tersebut disebut 'Tabel tumpukan'. Tabel tersebut tidak memiliki kriteria untuk menentukan urutan data di dalam halaman dan halaman yang disortir dan ditautkan.
Ketika indeks berkerumun dibuat di tabel itu, kami menyebut tabel yang diurutkan sebagai tabel berkerumun.
Ada juga jenis indeks lain yang disediakan oleh SQL Server:
- Indeks Unik memberlakukan keunikan nilai kolom;
- Indeks penutup berisi semua kolom yang diminta oleh kueri;
- Indeks gabungan berisi beberapa kolom dalam kunci indeks;
- Jenis indeks khusus lainnya adalah indeks XML, Spasial, dan Columnstore.
Keuntungan dari indeks SQL Server adalah meningkatkan kinerja kueri. Namun, ini berfungsi jika hanya indeks yang benar. Jika Anda salah mendesainnya, ini akan berdampak negatif pada kinerja kueri dan menghabiskan sumber daya SQL Server untuk menyimpan dan memelihara indeks yang tidak berguna.
Memilih indeks terbaik yang memperbaiki semua masalah bukanlah tugas yang mudah. Menambahkan indeks baru dapat mempercepat proses pengambilan data, tetapi memperlambat proses modifikasi data. Setiap perubahan yang dilakukan pada tabel yang mendasarinya akan direfleksikan langsung ke semua indeks terkait agar data tetap konsisten.
Inilah sebabnya mengapa Anda harus mempelajari dan menguji dampak indeks baru sebelum membuatnya di lingkungan produksi. Penting juga untuk memantau dampak dan penggunaannya setelah menerapkannya ke lingkungan produksi.
Faktor yang perlu dipertimbangkan saat merancang indeks SQL Server baru
Faktor pertama adalah jenis beban kerja database . Misalkan kita berurusan dengan beban kerja OLTP dengan sejumlah besar operasi tulis. Ini membutuhkan jumlah indeks yang paling sedikit. Kasus lainnya adalah beban kerja OLAP dengan banyak operasi baca – ini akan menuntut sebanyak mungkin indeks untuk mempercepat pengambilan data.
Juga, Anda perlu melihat ukuran tabel . SQL Server Engine lebih suka memindai tabel yang mendasarinya secara langsung, daripada membuang waktu dan sumber daya untuk memilih indeks terbaik untuk pengambilan data dari tabel kecil itu.
Setelah Anda memutuskan untuk membuat indeks pada tabel itu, Anda perlu mengidentifikasi jenis indeks untuk melayani kueri Anda . Di sana, Anda menentukan kolom yang ditambahkan ke kunci indeks. Basis adalah tipe data kolom dan posisi dalam predikat kueri dan kondisi gabungan.
Faktor-faktor ini harus menjamin kinerja pengambilan data terbaik, dalam urutan yang benar, dan menjaga indeks sesingkat dan sesederhana mungkin.
Faktor lain yang perlu dipertimbangkan saat merancang indeks baru adalah penyimpanan indeks . Direkomendasikan untuk membuat indeks non-clustered pada filegroup dan disk drive yang terpisah. Dengan cara ini, Anda mengisolasi operasi I/O yang dilakukan di halaman data indeks dari file data database.
Pertimbangkan menyetel indeks FAKTOR PENGISI , yang menentukan persentase ruang pada setiap halaman tingkat daun yang diisi dengan data (nilainya berbeda dari default 0 atau 100 persen). Tujuannya adalah untuk meninggalkan ruang di setiap halaman data indeks untuk catatan yang baru dimasukkan atau diperbarui. Ini juga meminimalkan terjadinya pemisahan halaman yang dapat menyebabkan masalah fragmentasi indeks.
Manajemen Indeks
Peran administrator database dalam meningkatkan kinerja kueri dengan indeks SQL Server tidak terbatas pada pembuatan indeks. Anda harus secara proaktif memantau penggunaan indeks untuk mengidentifikasi kualitasnya. Selain itu, kita perlu memelihara indeks secara teratur untuk memperbaiki masalah fragmentasi.
SQL Server Management Studio, dengan fungsionalitas pelaporan yang kuat, menyediakan data statistik yang paling berguna untuk administrator database. Salah satu laporan bawaan ini adalah Statistik Penggunaan Indeks :
Laporan Statistik Penggunaan Indeks menjelaskan bagaimana indeks basis data digunakan dalam bentuk:
- Mencari :berapa kali indeks digunakan oleh SQL Engine untuk menemukan baris tertentu.
- Pemindaian :berapa kali halaman daun indeks dipindai oleh SQL Engine.
- Pencarian :berapa kali indeks Non-cluster digunakan sebagai indeks Clustered untuk mengambil sisa kolom yang tidak tercantum dalam indeks non-cluster.
- Pembaruan :berapa kali data indeks diubah.
Perhatikan bahwa tujuan utama pembuatan indeks adalah untuk melakukan operasi pencarian indeks, seperti yang ditunjukkan di bawah ini:
Laporan sebelumnya sangat membantu dalam menentukan apakah SQL Server memanfaatkan indeks ini untuk mempercepat proses pengambilan data atau tidak. Jika ternyata indeks tertentu tidak berfungsi sebagaimana mestinya, jatuhkan, dan ganti dengan yang lebih baik.
Laporan kedua yang disediakan oleh SSMS adalah Indeks Statistik Fisik . Ini mengembalikan informasi statistik tentang persentase fragmentasi indeks per setiap partisi indeks, dengan jumlah halaman pada setiap partisi indeks.
Ini juga merekomendasikan cara memperbaiki masalah fragmentasi indeks dengan membangun kembali atau mengatur ulang indeks tersebut, sesuai dengan persentase fragmentasi, seperti yang ditunjukkan di bawah ini:
Untuk menerapkan rekomendasi yang diberikan oleh laporan, Anda dapat menjalankan perintah defragmentasi indeks untuk setiap indeks. Atau, Anda dapat membuat rencana pemeliharaan menggunakan SSMS untuk mempertahankan indeks dengan cara terbaik.
Pengelola Indeks dbForge
dbForge Index Manager adalah add-in SSMS, yang berfungsi untuk mendeteksi dan memperbaiki masalah fragmentasi indeks SQL Server.
Ini juga merupakan alat terpusat, menyediakan kemampuan untuk mendeteksi persentase fragmentasi indeks di seluruh database. Anda dapat memperbaiki masalah ini dengan melakukan pembangunan kembali indeks. Cara lain adalah dengan mengatur ulang operasi, berdasarkan tingkat keparahan fragmentasi indeks itu. Di antara opsi lainnya, ada pembuatan skrip T-SQL untuk eksekusi perintah terkait indeks, mengekspor hasil analisis indeks untuk referensi nanti, dan menggunakan antarmuka baris perintah untuk mengotomatiskan tugas pemeliharaan indeks.
dbForge Index Manager tersedia di halaman unduhan Devart. Anda dapat menginstalnya ke mesin Anda menggunakan panduan instalasi langsung. Setelah instalasi berhasil, add-in ini siap digunakan.
Untuk menggunakannya dalam SSMS, klik kanan pada database dan pilih Kelola Fragmentasi Indeks dari daftar Manajer Indeks:
Dari jendela Pengelola Indeks, Anda dapat memfilter nama basis data yang Anda minati.
Klik Analisis ulang untuk melakukan pemeriksaan fragmentasi indeks untuk database yang dipilih. Ini secara otomatis menunjukkan statistik fragmentasi indeks untuk semua indeks yang dibuat di bawah database yang dipilih selama proses ini.
Alat Pengelola Indeks juga merekomendasikan tindakan untuk memperbaiki masalah fragmentasi indeks, berdasarkan persentase fragmentasi:
Memeriksa indeks di bawah bagian Tindakan yang Diperlukan di jendela sebelumnya memungkinkan untuk mengekspor daftar tindakan sebagai laporan CSV. Ini memungkinkan Anda untuk melakukan perbaikan yang disarankan dengan mengatur ulang atau membangun kembali indeks yang bermasalah langsung dari halaman itu atau membuat skrip untuk melakukannya nanti:
Perbaikan fragmentasi indeks dalam skenario kami adalah seperti di bawah ini:
Jika Anda menjalankan skrip sebelumnya atau mengklik Perbaiki opsi, lalu Analisis ulang hasilnya, Anda melihat bahwa masalah fragmentasi diperbaiki secara langsung:
Dengan cara ini, kami memanfaatkan Pengelola Indeks dbForge untuk menganalisis dan mengidentifikasi masalah fragmentasi indeks dan kemudian melaporkan atau memperbaikinya langsung dari tempat yang sama.
Alat yang berguna
dbForge Index Manager menghadirkan perbaikan indeks cerdas dan fragmentasi indeks langsung ke SSMS. Alat ini memungkinkan Anda mengumpulkan statistik fragmentasi indeks dengan cepat dan mendeteksi database yang memerlukan pemeliharaan. Anda dapat langsung membangun kembali dan mengatur ulang indeks SQL Server dalam mode visual atau menghasilkan skrip SQL untuk penggunaan di masa mendatang. dbForge Index Manager untuk SQL Server akan secara signifikan meningkatkan kinerja Anda tanpa banyak usaha.