Back to IF3140 Sistem Basis Data
Topic
Questions/Cues
Apa itu File Scan (Linear Search)?
Kapan Index Scan digunakan?
Algoritma seleksi berdasarkan Primary Index?
Algoritma seleksi berdasarkan Secondary Index?
Bagaimana menangani seleksi dengan perbandingan (
<,>)?Apa itu seleksi konjungtif (AND)?
Algoritma untuk seleksi konjungtif?
Apa itu seleksi disjungtif (OR)?
Bagaimana menangani seleksi dengan negasi (NOT)?
Reference Points
- Slides 13-18
Algoritma Dasar: File Scan
A1 (Linear Search): Ini adalah metode paling dasar di mana sistem memindai setiap blok file satu per satu dan menguji setiap record di dalamnya untuk melihat apakah memenuhi kondisi seleksi.
Kelebihan: Dapat diterapkan untuk kondisi seleksi apa pun, tidak peduli urutan record, dan tidak memerlukan indeks.
Estimasi Biaya:
Biaya transfer blok: (di mana adalah jumlah blok yang berisi record dari relasi r).
Jumlah seek: 1.
Total: .
Kasus Khusus (Key Attribute): Jika seleksi dilakukan pada atribut kunci (key), pencarian bisa berhenti setelah record pertama ditemukan.
Estimasi Biaya Rata-rata: transfer blok + 1 seek.
Seleksi Menggunakan Indeks (Index Scan)
Metode ini menggunakan struktur data indeks untuk menemukan record yang memenuhi syarat dengan lebih cepat. Syarat utamanya adalah kondisi seleksi harus pada atribut yang menjadi search-key dari indeks tersebut.
A. Seleksi dengan Kondisi Kesetaraan ()
A2 (Primary Index, pada Key): Digunakan untuk mengambil satu record unik yang memenuhi kondisi kesetaraan pada atribut kunci utama.
Estimasi Biaya:
di mana adalah tinggi (level) dari indeks. Biaya ini mencakup penelusuran indeks () ditambah satu akses untuk mengambil blok data.
A3 (Primary Index, pada Non-Key): Digunakan untuk mengambil beberapa record yang memenuhi kondisi kesetaraan pada atribut yang bukan kunci unik. Karena ini adalah primary index, record-record yang cocok akan berada di blok-blok yang berurutan.
Estimasi Biaya:
di mana b adalah jumlah blok yang berisi record yang cocok. Biaya ini mencakup penelusuran indeks, satu seek ke blok data pertama, dan transfer b blok data secara sekuensial.
A4 (Secondary Index, pada Non-Key): Digunakan untuk mengambil record melalui indeks sekunder.
Jika Search-Key adalah Candidate Key: Mengambil satu record. Biayanya sama seperti A2:
Jika Search-Key bukan Candidate Key: Mengambil banyak record. Setiap record yang cocok bisa berada di blok yang berbeda-beda.
Estimasi Biaya:
di mana n adalah jumlah record yang cocok. Biaya ini bisa menjadi sangat mahal karena setiap record mungkin memerlukan I/O (seek + transfer) terpisah.
B. Seleksi dengan Kondisi Perbandingan (, )
A5 (Primary Index, Perbandingan): Digunakan pada relasi yang sudah terurut berdasarkan atribut A.
Untuk : Gunakan indeks untuk menemukan tuple pertama yang nilainya , lalu pindai relasi secara sekuensial dari titik tersebut.
Untuk : Tidak perlu menggunakan indeks. Cukup pindai relasi dari awal hingga menemukan tuple pertama yang nilainya .
A6 (Secondary Index, Perbandingan):
Untuk : Gunakan indeks untuk menemukan entri pertama , lalu pindai leaf node indeks secara sekuensial untuk mendapatkan pointer ke semua record yang relevan.
Untuk : Pindai leaf node indeks dari awal hingga menemukan entri pertama .
Kekurangan: Setiap pointer record yang ditemukan mungkin memerlukan I/O disk terpisah, sehingga dalam banyak kasus, File Scan (A1) bisa jadi lebih murah.
Algoritma untuk Seleksi Kompleks
Seleksi kompleks melibatkan kombinasi beberapa kondisi menggunakan operator logika AND, OR, dan NOT.
A. Konjungsi (AND):
A7 (Menggunakan Satu Indeks): Pilih satu kondisi yang paling selektif (menghasilkan record paling sedikit) dan memiliki indeks yang paling efisien. Gunakan algoritma yang sesuai (A2-A6) untuk mengambil record berdasarkan . Setelah record diambil ke memori, terapkan kondisi lainnya (, , …) sebagai filter.
A8 (Menggunakan Composite Index): Jika ada indeks komposit (multi-key) yang sesuai dengan beberapa kondisi, gunakan indeks tersebut untuk pencarian langsung.
A9 (Menggunakan Interseksi Identifier): Metode ini memerlukan indeks yang menyimpan pointer record.
Untuk setiap kondisi yang memiliki indeks, ambil semua set pointer record yang memenuhi syarat.
Lakukan operasi interseksi (irisan) pada semua set pointer tersebut.
Ambil record dari file berdasarkan hasil interseksi pointer.
B. Disjungsi (OR):
A10 (Menggunakan Union Identifier): Hanya berlaku jika semua kondisi memiliki indeks yang tersedia.
Untuk setiap kondisi , ambil semua set pointer record yang memenuhi syarat.
Lakukan operasi union (gabungan) pada semua set pointer tersebut.
Ambil record dari file berdasarkan hasil union pointer.
Jika salah satu kondisi tidak memiliki indeks, maka metode paling aman adalah menggunakan Linear Scan (A1).
C. Negasi (NOT):
Cara paling umum adalah menggunakan Linear Scan (A1) dan menerapkan kondisi pada setiap record.
Jika kondisi sangat sedikit menghasilkan record (sangat selektif) dan memiliki indeks, alternatifnya adalah: temukan dulu semua record yang memenuhi menggunakan indeks, lalu sisanya adalah hasil dari . Namun, ini tetap memerlukan cara untuk mengidentifikasi “sisa” record, yang seringkali kembali ke pemindaian file.
Algoritma seleksi berfungsi untuk memilih subset tuple dari sebuah relasi berdasarkan kondisi tertentu, di mana pilihan algoritma sangat bergantung pada ketersediaan dan jenis indeks untuk meminimalkan biaya I/O disk. Metode paling dasar adalah File Scan (pencarian linear) yang selalu dapat digunakan tetapi seringkali tidak efisien. Penggunaan Index Scan secara signifikan mempercepat pencarian untuk kondisi kesetaraan (
=) maupun perbandingan (<,>), dengan biaya yang bervariasi tergantung pada apakah indeks tersebut primary atau secondary. Untuk seleksi kompleks yang melibatkanANDdanOR, strategi seperti memilih indeks paling efisien, menggunakan indeks komposit, atau melakukan operasi irisan/gabungan pada pointer record dapat diterapkan untuk mencapai efisiensi yang lebih tinggi daripada sekadar melakukan scan penuh.
Additional Information
Rincian Variabel Biaya
Untuk memahami formula biaya dengan lebih baik, berikut adalah arti dari variabel yang digunakan:
: Jumlah blok disk yang ditempati oleh relasi
r.: Jumlah record/tuple dalam relasi
r.: Tinggi (jumlah level) dari struktur indeks, tidak termasuk leaf level.
: Waktu yang dibutuhkan untuk mentransfer satu blok disk.
: Waktu yang dibutuhkan untuk satu kali seek (pergerakan head disk).
Trade-Off: Kapan Linear Scan Lebih Baik dari Index Scan?
Mungkin terdengar aneh, tetapi ada skenario di mana
A1 (Linear Scan)lebih unggul daripadaA4 (Secondary Index Scan)atauA6 (Secondary Index Comparison).
Skenario: Ketika sebuah query
SELECT * FROM mahasiswa WHERE ipk > 3.5;mengembalikan sebagian besar mahasiswa (misalnya 40% dari total record).Alasan: Menggunakan secondary index pada
ipkakan menghasilkan banyak sekali pointer record. Karena ini adalah secondary index, setiap record bisa berada di blok disk yang berbeda. Mengambil setiap record satu per satu akan menyebabkan seek dan transfer yang sangat banyak (biaya ). Sebaliknya, melakukan linear scan hanya membaca semua blok secara sekuensial () yang jauh lebih sedikit operasinya.Kesimpulan: Secondary index sangat efisien untuk query dengan selektivitas tinggi (mengembalikan sedikit record), tetapi menjadi tidak efisien untuk selektivitas rendah.
Peran Query Optimizer
Dalam sistem basis data nyata, programmer tidak memilih algoritma A1-A10 secara manual. Query Optimizer adalah komponen yang secara otomatis menganalisis query, melihat statistik data (jumlah record, kardinalitas, distribusi nilai), dan ketersediaan indeks untuk memilih rencana eksekusi (termasuk algoritma seleksi) dengan estimasi biaya terendah.
Eksplorasi Mandiri
Coba buat sebuah tabel besar di DBMS pilihan Anda (misalnya PostgreSQL atau MySQL).
Isi dengan jutaan baris data acak.
Jalankan query
SELECTdengan kondisiWHEREpada kolom yang tidak memiliki indeks. Gunakan perintah sepertiEXPLAINatauEXPLAIN ANALYZEuntuk melihat rencana eksekusi. Anda kemungkinan besar akan melihat “Sequential Scan” atau “Table Scan”.Sekarang, buat B-Tree index pada kolom tersebut.
Jalankan kembali query yang sama. Gunakan
EXPLAINlagi. Anda sekarang seharusnya melihat “Index Scan” atau sejenisnya, terutama jika query Anda cukup selektif. Perhatikan bagaimana estimasi biayanya berubah drastis.Sumber & Referensi Lanjutan:
Buku Teks: “Database System Concepts” oleh Silberschatz, Korth, dan Sudarshan, Chapter 15.
Tools: PostgreSQL, MySQL, SQL Server, Oracle (semuanya memiliki perintah
EXPLAINuntuk menganalisis rencana query).