Penggunaan index di table microsoft sql server pada dasarnya berfungsi
untuk mengurutkan data sehingga proses pencarian set data bisa lebih
cepat karena data sudah tersusun dengan kondisi tertentu.
Command index yang digunakan adalah :
CREATE INDEX [Nama_Index] ON [Nama_Table] ( [Nama_Kolom] [ASC/DESC] )
kebiasaan saya dalam penamaan sebuah index table dengan menyebutkan Idx_ di depan nama table yang saya index itu sendiri.
Contohnya :
CREATE INDEX idx_nip_pegawai ON pegawai (nip ASC )
Untuk melihat index yang telah dibuat melalui SQL Server Management Studio pada pada :
Database -> Tables -> Nama Tabel -> Indexes
Untuk menghapus index yang sudah dibuat bisa menggunakan perintah :
DROP [Nama_Table.Nama_Index]
Dengan melakukan index pada table akan mempercepat proses pencarian atau
pemrosesan data akan tetapi penentuan column index juga harus
hati-hati, karena tidak semua column perlu dilakukan pengindexan, jika
jumlah data record yang ditampung masih sedikit tidak terlihat
pengaruhnya akan tetapi jika isi data telah menjadi besar maka akan
berdampak pada performance database.
Jika data yang ditampung nantinya besar, lebih elegan jika menggunakan
pengindexan clustered maupun nonclustered, tergantung kondisi yang
memungkinkan dan dianggap paling cocok.
Ada beberapa perbedaan clustered index dan nonclustered index
pada sql server yaitu dalam clustered index hanya terdiri satu dalam
satu table atau hanya dapat diterapkan satu kali pada satu table,
sedangkan nonclustred boleh lebih dari satu (banyak). Selain itu
clustered index lebih cepat karena menyatu dengan fisik table dan tidak
memerlukan memory tambahan sedangkan nonclustered index memerlukan
memory tambahan.
Clustered Index
Saat create table dan belum ada clusterd index, maka SQL Server secara
otomatis menjadikan primary key sebagai clusterd index, di clustred
index boleh memiliki 2 kolom yang dikenal dengan composite clustered
index. Jika clustered index yang terbentuk otomatis oleh primary key
constraint terhapus maka primary key juga akan ikut terhapus pada table
tersebut. Yang harus diperhatikan yaitu clusterd index yang berasal dari
primary key tidak bisa dihapus menggunakan query penghapusan.
Penggunaan clustered index sangat baik ketika memperbaharui data atau
menghasilkan data.
Kalau menurut pemahaman saya pribadi clustered index ini ibarat sebuah buku kamus,
yang susunan kata demi kata sudah tersusun sesuai susunan abjad,
sehingga memudahkan pencarian kata ( jadi ingat waktu sma dulu kalau
pelajaran bahasa inggris bawa kamus besar)
Command Clustered Index :
CREATE CLUSTERED INDEX [Nama_Index] ON [Nama_Table] ( [Nama_Kolom1] [ASC/DESC], [Nama_Kolom2] [ASC/DESC])
Nonclustered Index
setiap kali membuat nonclustered index maka akan membentuk table
tambahan yang berisi data index dalam artian data hasil index terpisah
dari table sumber. Jadi jika diasumsikan non clustered index ini seperti
bagian index dari sebuah buku atau skripsi, ...
Command Non-clustered Index :
CREATE NONCLUSTERED INDEX [Nama_Index] ON [Nama_Table] ( [Nama_Kolom1] [ASC/DESC], [Nama_Kolom2] [ASC/DESC])
Sebagai contoh :
Buat table dengan nama pegawai pada database dbpemerintah dengan isian data seperti tampilan berikut :
Sebagai contoh
misalkan kita memiliki database dengan nama dbpemerintah dan table
pegawai, dengan isi data seperti gambar dibawah ini :
Terlihat isi column nip, nama depan nama belakang dan gaji pokok belum
tersusun rapi. sekarang coba gunakan perintah clustered index
CREATE CLUSTERED INDEX idx_nm_depan on pegawai(nama_depan)
lihat hasilnya,
ketika melakukan query select table pegawai, sudah tersusun berdasarkan
nama depan secara ASC default jika tidak menyebukan saat melakukan
create clustered index. Jika melakukan insert data maka data akan
langsung di urutkan ASC berdasarkan kolom nama_depan.
Bagaimana jika ingin mengurutkan nama depan ASC dan nama belakang ASC
berdasarkan nama depan. apa kah harus create clustered index lagi ?,
jawabannya tidak, karena clustered index hanya bisa dibuat satu kali.
Jika ingin melakukan hal tersebut delete dulu index yang pernah dibuat
setelah itu baru buat kembali clustered index index multiple column
dengan perintah
CREATE CLUSTERED INDEX idx_nm_depan_belakang ON pegawai (nama_depan ASC, nama_belakang ASC)
Setelah ini mari dicoba menggunakan non clustered index, sebenarnya sama
saja, hanya saja jika menggunakan non clustered index tidak merubah
data misalkan jika saat awal masih terlihat data yang tidak berurutan,
setelah menggunakan non clustered index maka data yang ditampilkan masih
tetap tidak berurutan (sorting).
CREATE NONCLUSTERED INDEX idx_nm_dpn_nm_blk ON pegawai(nama_depan ASC, nama_belakang ASC)
untuk mengetahui informasi mengenai index dari sebuah table bisa mengetikan perintah
sp_helpindex pegawai
Sekarang coba melakukan query pencarian dengan mengetikan
SELECT * FROM pegawai WHERE nama_depan LIKE '%a'
Keuntungan dan kerugian menggunakan index
keuntungannya yaitu ketika melakukan query akan terasa lebih cepat
daripada tidak melakukan pengindexan, namun kerugiannya jika index yang
dibuat banyak jika terjadi insert edit dan delete maka prosesnya akan
berulang kali sesuai jumlah index yang dibuat berimbas pada
performance, jika data index tidak ditemukan maka proses akan dimulai
dari awal lagi.
Langganan:
Posting Komentar (Atom)
EmoticonEmoticon