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.

  1. Untuk setiap kondisi yang memiliki indeks, ambil semua set pointer record yang memenuhi syarat.

  2. Lakukan operasi interseksi (irisan) pada semua set pointer tersebut.

  3. Ambil record dari file berdasarkan hasil interseksi pointer.

B. Disjungsi (OR):

A10 (Menggunakan Union Identifier): Hanya berlaku jika semua kondisi memiliki indeks yang tersedia.

  1. Untuk setiap kondisi , ambil semua set pointer record yang memenuhi syarat.

  2. Lakukan operasi union (gabungan) pada semua set pointer tersebut.

  3. Ambil record dari file berdasarkan hasil union pointer.

  4. 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.

Summary

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 melibatkan AND dan OR, 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.