Mungkin indexing sudah familiar dibicarakan dalam kalangan database.Tetapi, saya pribadi kurang mengerti secara pasti teknik-teknik design indexing.Indexing secara dasar digunakan untuk mengoptimalisasi Query yang akan digunakan programmer, jadi untuk execution time bisa diminimalkan, penggunaan resource dan I/O juga bisa diminimalkan tetapi tidak mengurangi pencapaian yang dituju.Indexing, terkait kepada primary key.Karena apabila satu tabel mempunyai satu atau beberapa primary key, secara default akan di create satu clustered index.Nah, pertanyaannya: “Apakah semua tabel harus memiliki primary key sehingga mempunyai index?”

Ternyata tidak, tidak semua tabel diharuskan mempunyai primary key.Semua tergantung kepada design database dan keperluan tabel itu sendiri.Bisa saja satu tabel tidak membutuhkan primary key, ketika isi dari tabel tersebut hanya berisi data-data tanpa terhubung ke tabel yang lain.Atau tabel tersebut berisi data-data konversi dari file.Pembuatan primary key bisa dipertimbangkan dengan keperluan integrasi dengan tabel yang lain.Untuk SELECT statement yang digunakan dalam query juga lazim menggunakan constraint select ke primary key, itu juga memungkinkan tetapi hanya ketika tipe primary key tersebut “integer” sehingga tidak menggunakan resource yang banyak.

Ada satu cara design indexing yang menurut saya bisa digunakan, memang simpel, tapi untuk beberapa kondisi tertentu sangat bermanfaat, dinamakan Filtered Indexing. Secara basic, filtered indexing adalah memfilter data-data mana yang ingin di-indexing.Hal itu dimaksudkan ketika dalam sejumlah row data yang mencapai ratusan juta, jika di index satu-persatu maka akan membutuhkan effort yang besar ketika melakukan select terhadap data-data yang sering muncul dan akan men-scan index secara keseluruhan.Nah, untuk menghindari full scan index untuk melakukan select ke dalam satu database, dirancang filtered index, menggunakan code :

CREATE NONCLUSTERED INDEX FilteredIndex
ON HR.Coba(Negara)
WHERE Negara IN (‘France’,'Italy’,'Spain’)

Dengan code berikut, maka di index hanya untuk data-data terselect di where tersebut,sehingga ketika select, yang akan dicari tidak fullscan, tetapi merujuk ke dalam filtered index.

Selamat belajar… :)

Advertisement