Overview
SQL index adalah query yang dapat meningkatkan performa pengambilan data dari database. Artikel ini akan mengulas tujuan, cara kerja, elemen utama, jenis-jenis, dan cara membuat index di SQL.
Dalam SQL, index adalah sebuah query dari database yang dapat membuat hasil query lebih cepat atau membantu meningkatkan performa pengambilan data dari sebuah tabel.
Tujuan Index di SQL
Sebelum kita mengetahui lebih lanjut mengenai index, perhatikan contoh berikut ini:
Kita ingin membaca sebuah topik dalam sebuah buku. Apabila buku tersebut sangatlah tebal dan memiliki banyak topik, kita akan kesulitan untuk mencari topik yang kita ingin baca di dalam buku tersebut.
Oleh karena itu, penulis buku biasa menyematkan halaman index di dalam buku tersebut, agar mempermudah pembaca mencari halaman atau topik tertentu. Dalam SQL, index berfungsi halnya seperti demikian.
Manfaat dari index di SQL adalah mempersingkat waktu pencarian data karena data bisa ditemukan berdasarkan kolom dari tabel.
Cara Kerja SQL Index
Cara kerja dari teknik index ini adalah dengan membuat pointer atau penanda yang tertanam pada row atau baris dari kolom yang dipilih. Dengan kata lain, saat menjalankan operasi query, database tidak perlu membaca seluruh tabel tersebut namun hanya perlu mencari pointer yang sudah ditanam tersebut.
Karena tidak perlu membaca seluruh tabel, maka ini membuat pemakaian resource memori CPU lebih sedikit dan membuat kinerja CPU lebih hemat dan optimal.
Dalam menggunakan teknik index biasanya akan direferensikan sebuah kolom, namun perlu dipastikan bahwa kolom yang dipilih adalah kolom yang akan sering digunakan saat melakukan operasi query.
Dalam teknik index kita dapat mereferensikan satu atau lebih kolom. Akan tetapi, apabila menggunakan banyak index pada beberapa kolom dapat menghambat proses DML (Data Manipulation Language).
Alasannya, jika ada perubahan yang terjadi maka kita juga harus menyesuaikan index-nya dan bisa memperlambat kecepatan database dalam prosesnya.
2 Elemen Utama SQL Index
Sebelum mengetahui cara index di SQL, perlu diketahui teknik index memerlukan dua poin penting yaitu index key dan juga index pointer. Index key sendiri merupakan kolom pada tabel yang kita referensikan sebagai index, sedangkan index pointer merupakan referensi lokasi sel data di dalam tabel.
Biasanya, apabila kita menggunakan query untuk mencari data, terutama data yang memiliki kondisi khusus, kita menuliskan klausa WHERE di dalam klausa SELECT.
Saat melakukan operasi pencarian data menggunakan klausa SELECT dan WHERE, sistem database akan mencari row yang cocok dengan spesifikasi yang telah disyaratkan di klausa WHERE. Di sini kita memasukkan kolom yang ditentukan pada index key.
Setelah itu, ketika index key sudah menemukan data yang cocok dengan spesifikasi yang kita tuliskan pada klausa WHERE, maka akan digunakan index pointer untuk memberikan baris yang sesuai pada tabel tersebut.
Jenis-jenis SQL Index
Pada teknik index, ada dua jenis index yang diketahui yaitu Clustered Index dan Non-Clustered Index. Kedua jenis index ini memiliki fungsi yang sama, yaitu mempersingkat waktu query dan mempercepat pengambilan data.
Nnamun, hanya saja cara kerjanya sedikit berbeda. Masing-masing tipe akan dijelaskan sebagai berikut:
#1 Clustered Index
Clustered index merupakan teknik index yang mengurutkan data pada tabel yang didasari oleh satu kolom atau beberapa kolom. Index jenis ini akan mengurutkan data berdasarkan index key-nya dan menyimpan data page (sebuah blok data yang disimpan pada disk) dengan urutan yang sama dengan index key.
Perlu diketahui bahwa setiap tabel hanya bisa menggunakan satu jenis clustered index saja.
Sebagai contoh ketika ada sebuah tabel historical_match yang di mana pada tabel tersebut kita membuat clustered index pada kolom match_date, maka sistem database akan mengurutkan data berdasar kolom tersebut dan secara bersamaan data page akan disimpan dan diurutkan pada nilai kolom tersebut.
#2 Non-Clustered Index
Berbeda dengan jenis index sebelumnya, non-clustered index ini akan membuat struktur data yang terpisah dari tabel. Struktur data ini berisi salinan dari index key dan index pointer ke lokasi baris dalam tabel.
Karena membuat struktur data baru yang terpisah, maka dengan menggunakan non-clustered index, kita dapat menggunakan lebih dari satu index pada sebuah tabel, tidak seperti pada clustered index.
Sebagai contoh, sama seperti pada contoh sebelumnya, kita membuat sebuah tabel historical_match lalu kita pasang teknik non-clustered index pada kolom match_id.
Lalu sistem database akan membuat struktur data terpisah yang berisi salinan kolom match_id dan sebuah pointer ke lokasi dari row data dari tabel tersebut. Ketika kita menggunakan klausa query WHERE dengan menggunakan kolom match_id, maka sistem database menggunakan teknik non-clustered index untuk mencari data dengan cepat.
{{COMPONENT_IDENTIFIER}}
Perbedaan Clustered Index dan Non-Clustered Index
Perbedaan mendasar dari kedua teknik di atas berada dalam pembuatan index-nya saja. Pada clustered index langsung pada kolom pada tabel tersebut, sedangkan non-clustered index berada di luar dari tabel dengan membuat struktur data dari kolom yang direferensikan.
Kedua cara tersebut sama-sama meningkatkan efisiensi CPU dan meningkatkan kinerja SQL.
Cara Membuat Index Tabel di SQL
Untuk membuat sebuah index pada tabel kita dapat menggunakan query berikut:
Untuk membuat sebuah index, kita cukup menuliskan query CREATE INDEX diikuti dengan nama index yang kita inginkan. Setelah itu, kita harus menentukan tabel yang ingin kita tambahkan index pada table_name, dan kita perlu memasukan kolom yang ingin kita berikan index di dalamnya.
Kolom yang dimasukan ini bisa lebih dari satu. Sebagai tambahan, apabila kita ingin memastikan bahwa kolom yang ingin direferensikan tersebut bersifat unik, maka kita bisa menambahkan UNIQUE di antara CREATE dan INDEX.
Selain itu, apabila kita ingin menentukan jenis index yang ingin kita pakai seperti clustered/non-clustered index, dengan cara berikut:
- menambahkan CLUSTERED di antara keyword CREATE dan INDEX (sama seperti UNIQUE) apabila ingin membuat clustered index, atau
- menambahkan NONCLUSTERED di antara keyword CREATE dan INDEX (sama seperti UNIQUE) apabila ingin membuat non-clustered index.
Namun perlu diperhatikan bahwa tidak semua jenis database mendukung pembuatan jenis clustered ataupun non-clustered index ini. Penjelasan lebih lengkapnya dapat dilihat pada artikel SQL Database.
Kita akan menggunakan contoh tabel mengenai review makanan yang memiliki jumlah baris sebanyak 568.455 baris untuk contoh pada konten index ini.
Kita akan mencoba mencari data dengan nomor id yaitu 1.
Ketika hasil dari query ditampilkan, kita bisa lihat dalam mencari data review dengan id = 1 membutuhkan waktu 956 ms. Kita akan mencoba untuk menambahkan index menggunakan kolom id sebagai index, untuk melihat apakah SQL dapat mencari data tersebut lebih cepat.
Pada query di atas, kita telah berhasil menambahkan index pada tabel tersebut. Kita akan mencoba kembali untuk mencari data dengan id = 1 pada tabel review sebelumnya. Perhatikan contoh berikut ini:
Setelah menggunakan index, kecepatan query untuk mencari data pada tabel review tersebut menjadi 2 ms.
Hal ini membuktikan, bahwa dengan menambahkan index pada tabel tersebut, maka performa query dalam mencari data menjadi lebih baik dan waktu pencarian bisa lebih singkat.
Efek positifnya, memori CPU yang digunakan untuk menjalankan database ini pun tidak terlalu banyak terpakai untuk menjalankan sebuah query. Itulah cara bagaimana index mempengaruhi performa database.
Penutup
Teknik index ini sangat membantu dalam mencari data dengan cepat dan menghemat waktu pada tabel yang mempunyai jumlah baris yang sangat besar. Alasannya, sistem database tidak perlu membaca satu tabel penuh dan hanya mencari index menggunakan kombinasi pointer dan index key yang membuat beban CPU menjadi lebih rendah.
Masih ragu? Coba dulu 3 hari, GRATIS
di Full-Stack Trial Class!
Rasakan pengalaman belajar di RevoU Full-Stack Program: Kelas 100% LIVE, Mini portofolio lewat hands-on assignment, Bimbingan Team Lead & small group discussion. Kalau cocok, kamu bisa lanjut daftar Full Program dengan kesempatan Fast-Track (skip semua tes seleksi masuk, langsung ke tahap akhir!)
Masih ragu? Coba dulu 3 hari, GRATIS
di Full-Stack Trial Class!
Rasakan pengalaman belajar di RevoU Full-Stack Program: Kelas 100% LIVE, Mini portofolio lewat hands-on assignment, Bimbingan Team Lead & small group discussion. Kalau cocok, kamu bisa lanjut daftar Full Program dengan kesempatan Fast-Track (skip semua tes seleksi masuk, langsung ke tahap akhir!)
Masih ragu? Coba dulu 3 hari, GRATIS
di Full-Stack Trial Class!
Rasakan pengalaman belajar di RevoU Full-Stack Program: Kelas 100% LIVE, Mini portofolio lewat hands-on assignment, Bimbingan Team Lead & small group discussion. Kalau cocok, kamu bisa lanjut daftar Full Program dengan kesempatan Fast-Track (skip semua tes seleksi masuk, langsung ke tahap akhir!)