Indexing
Materi Minggu ke-10
Teknik Informatika
Universitas Kristen Duta Wacana Yogyakarta
Tujuan
● Memahami Tujuan Index pada Database ● Memahami model dasar Index
Konsep Dasar
● Indexing digunakan untuk mempercepat akses
terhadap data yang diperlukan.
● Search Key
● Atribut yang digunakan untuk mencari record dalam file
● Index File
● Terdiri dari record-record dengan bentuk:
Index file biasanya berukuran lebih kecil daripada
Matrix Evaluasi Index
● Access Type ● Access Time ● Insertion Time ● Deletion Time ● Space OverheadTipe Index
● Ordered Index
● Search key disimpan dalam suatu urutan tertentu
● Hash Index
● Search key disebar dengan menggunakan fungsi
Ordered Index
● Pada Ordered Index, entri index disimpan secara terurut berdasar nilai
search key
● Primary index:
● Index dimana urutan search key menyatakan urutan data dalam sequential
file.
● Disebut juga dengan clustering index ● Biasanya Primary Key
● Secondary index :
● Index dimana urutan seach key berbeda dengan urutan data dalam
sequential file.
● Disebut juga non-clustering index
Dense Index
● Sebuah index item muncul untuk setiap nilai search key
dalam file.
● Index item berisi nilai search key dan pointer ke record
Sparse Index
● Item index dibuat hanya untuk beberapa record saja. ● Untuk menemukan record dengan nilai search key K
● Temukan item index dengan nilai search key terbesar < K. ● Cari data yang ditemukan mulai dari record seperti yang
ditunjuk oleh item index.
● Sparse Index hanya dapat digunakan jika atribut kunci yang
Dense vs Sparse
● Dense index secara umum lebih cepat
● Sparse index membutuhkan space yang lebih kecil dan memiliki biaya perawatan yang lebih rendah untuk
penambahan dan penghapusan. (why?) ● Kompromi yang baik:
● Memiliki sparse index dengan satu entry per blok, dengan nilai
search key terkecil dalam blok.
– Biaya terbesar adalah meletakkan sebuah blok ke memori utama.
– Dijamin memiliki blok yang betul, kecuali record berada pada overflow
blok (dapat beberapa blok).
Latihan Dense Index
● Buatlah Struktur Dense Index untuk data
berikut, search key adlaah NAMA:
NIM NAMA 22071234 Abu Nawas 22073456 Aladin 22086312 Iron Man 22083920 Superman 22095312 Batman 22098982 Spiderman 22099482 Arjuna
Multilevel Index
● Walaupun dengan sparse index, ukuran index masih akan tumbuh
terlalu besar. Untuk 100,000 record, 10 / blok, dengan satu index item per blok, maka butuh 10,000 index item!
● Jika index terlalu besar untuk disimpan dalam memori utama,
pengaksesan/pencarian menjadi terlalu mahal.
● Untuk mengurangi jumlah pengaksesan disk terhadap index item,
simpan primary index dalam disk sebagai sebuah sequential file dan bangun sebuah sparse index terhadapnya.
● outer index – sebuah sparse index dari primary index ● inner index – file primary index
● Bahkan jika outer index terlalu besar untuk diletakkan dalam
Latihan Multilevel Index
● Buatlah Struktur Multilevel Index untuk data berikut (1
blok maks. 3 record), dimana NIM adalah PK:
NIM NAMA 22071234 Abu Nawas 22073456 Aladin 22086312 Iron Man 22083920 Superman 22095312 Batman 22098982 Spiderman
Update Index: Insert
● Temukan posisi record yang tepat untuk
penyisipan.
● Dense Index
● Tambahkan nilai search key pada index dan tabel
jika belum ada
● Jika telah ada search key pada index, tambahkan
data baru hanya pada tabel.
● Sparse Index
Update Index: Delete Dense Index
● Temukan record yang akan dihapus.
● Jika record yang dihapus merupakan
satu-satunya yang ditunjuk pada item index, maka hapus keduanya
● Selain itu, jika index item merujuk pada
search-key record yang dihapus lebih dari satu, maka hapus record datanya saja.
● Selain itu, jika record yang dihapus merupakan
Update Index: Delete Sparse Index
● Temukan record yang akan dihapus.
● Jika index tidak berisi search-key yang dihapus, maka
index tidak perlu diupdate.
● Selain itu, jika record yang terhapus adalah satu-satunya
record yang dirujuk oleh item index, maka item index di update untuk merujuk ke record search-key berikutnya. Jika search-key sudah ada pada index, maka item index hasil update akan dihapus.
● Selain itu, jika item index untuk search-key merujuk ke record
yang dihapus, maka sistem akan mengupdate penunjuk ke record selanjutnya yang memiliki search-key yang sama.
Secondary Index
● Seringkali, diinginkan mencari semua record
berdasar nilai dari suatu field tertentu (yang bukan search key yang sudah dibentuk
dalam primary index).
● Kita dapat memiliki sebuah secondary index
dengan suatu index item untuk setiap nilai search-key value; index item menunjuk ke sebuah tempat yang berisi pointer ke record sesungguhnya berdasar nilai search-key
B+ Tree Index
● Kerugian utama dari organisasi index-sequential file adalah unjuk kerja
akan menurun seiring dengan bertumbuhnya file.
● Struktur file B+ -tree, menjaga efisiensi organisasinya walaupun sering
terjadi insert dan delete.
● Kerugiannya, B+Tree membutuhkan biaya penambahan dan
penghapusan tambahan dan juga ruang penyimpanan tambahan.
● Sebuah index B + -tree adalah balanced tree, dimana dalam setiap jalur
dari root ke sebuah daun memiliki panjang yang sama.
● Setiap node bukan daun dalam tere harus memiliki anak antara n/2
Struktur Node B+ Tree
● Struktur Node
● K
i adalah nilai search key ● P
i adalah pointer ke anak (node bukan daun)
atau pointer ke record atau kelompok data (node daun)
Node Daun B+ Tree
● For i = 1, 2, . . ., n–1, pointer P
i baik menunjuk
ke file record dengan nilai search-key Ki, atau ke sekelompok pointer ke file record, setiap index item memiliki nilai search-key Ki.
● JIKA L
i, Lj adalah node daun DAN i < j, nilai
search-key Li < nilai search-key Lj
● P
n menunjuk ke node daun berikut dalam
Node Bukan Daun B+ Tree
● Node bukan daun membentuk sebuah
multi-level sparse index untuk node daun.
● Untuk node bukan daun dengan jumlah m
pointer:
● Semua search-key dalam subtree dimana nilai yang
ditunjuk P1 < K1.
● For 2 ≤ i ≤ n – 1, semua search-keys dalam subtree
Contoh B+ Tree (n=5)
● Node daun harus memiliki antara nilai 2 dan 4
● ([(n–1)/2] dan n –1).
● Node bukan daun selain root harus memiliki antara 3 – 5
anak
● ([(n/2)] dan n ).
Query B+Tree Index
● Temukan semua record dengan nilai search-key k.
● Mulai dari node root
● Tentukan node dengan nilai search key terkecil > k. ● Jika ditemukan nilainya, misal K
j. Maka ikuti Pi ke node anak
● Selain itu jika k > K
m–1, dimana terdapat m pointer dalam node.
Maka ikuti Pm ke node anak.
● Jika node yang dicapai dari pointer di atas, adalah bukan node
daun, ulangi prosedur di atas terhadap node bukan daun, dan ikuti pointer yang dihasilkan.
● Akhirnya mencapai node daun. Jika untuk beberapa i, kunci K
i = k ikuti pointer P ke record yang dituju. Selain itu tidak ada
Contoh Query B+ Tree
Root 17 24 30 2* 3* 5* 7* 14* 16* 19* 20* 22* 24* 27* 29* 33* 34* 38* 39* 13 Root 17 24 30 2* 3* 5* 7* 14* 16* 19* 20* 22* 24* 27* 29* 33* 34* 38* 39* 13Insert B+-Tree Index
● Temukan node daun L yang tepat. ● Letakkan data ke L.
● Jika L memiliki space cukup, done!
● Selain itu, harus split L (menjadi L dan node baru L2)
– Sebar ulang entri, copy up middle key.
– Insert index entry yang menunjuk ke L2 ke induk dari L. – Hal ini dapat terjadi secara rekursif
● Untuk split node index, sebar ulang redistribute entri, tapi push up
middle key. (berbeda dengan leaf splits.)
Contoh Insert 8* ke B+-Tree Index
● Temukan daun, dengan cara seperti pencarian. ● Tangani overflow dengan splitting.
Root
17 24 30
2* 3* 5* 7* 14* 16* 19* 20* 22* 24* 27* 29* 33* 34* 38* 39*
Contoh Insert 8* ke B+-Tree Index
● Tinjaulah berapa tempat minimum yang dijamin
baik dalam leaf maupun index node.
2* 3* 5* 7* 8*
5
Entry to be inserted in parent node. (Note that 5 is
continues to appear in the leaf.)s copied up and
appears once in the index. Contrast
17
Entry to be inserted in parent node. (Note that 17 is pushed up and only this with a leaf split.)
Sebelum dan sesudah insert
Root 17 24 30 2* 3* 5* 7* 14* 16* 19* 20* 22* 24* 27* 29* 33* 34* 38* 39* 13 2* 3* Root 17 24 30 14* 16* 19* 20* 22* 24* 27* 29* 33* 34* 38* 39* 13 5 7* 5* 8*Delete B+-Tree Index
● Mulai dari root, temukan daun L dimana
entry yang dihapus berada.
● Buang entri tersebut.
● Jika L adalah sedikitnya separo penuh, done! ● Jika L memiliki hanya d-1 entri,
– Cobalah untuk re-distribute, meminjam dari sibling (nyatakan parent node sama dengan L).
– Jika re-distribution gagal, merge L dan sibling.
Contoh Delete 19* dan 20*
● Deleting 19* is easy.
● Deleting 20* is done with re-distribution.
2* 3* Root 17 24 30 14* 16* 19* 20* 22* 24* 27* 29* 33* 34* 38* 39* 13 5 7* 5* 8*
Setelah Delete 19* dan 20*
2* 3* Root 17 30 14* 16* 33* 34* 38* 39* 13 5 7* 5* 8* 22* 24* 27 27* 29*Latihan B+ Tree Index
● Buatlah Struktur B+ Tree Index untuk data
berikut (n=3), dimana NIM adalah PK:
NIM NAMA 22071234 Abu Nawas 22073456 Aladin 22086312 Iron Man 22083920 Superman 22095312 Batman 22098982 Spiderman 22099482 Arjuna
B-Tree Index
● B-tree index mirip dengan B+ -tree index.
● Perbedaannya adalah B-tree membuang
nilai search key yang redundan.
● Dalam B+ -tree, beberapa nilai search key
muncul 2 kali.
● B-tree memungkinkan nilai search key
muncul hanya sekali.
B Tree
● Keuntungan:
● Mengurangi penyimpanan redundan.
● Beberapa pencarian lebih cepat (kunci mungkin
berada di node bukan daun).
● Kerugian :
● Node daun dan bukan daun memiliki ukuran
berbeda (struktur penyimpanan rumit)
● Penghapusan mungkin terjadi dalam node bukan
Definisi Index dengan SQL
● Pembuatan index
create index <index-name> on
<relation-name>(<attribute-list>) ● Contoh :
create index b-index on branch(branch-name) ● Gunakan create unique index untuk menyatakan
kondisi bahwa search key adalah candidate key.
● Untuk membuang index drop index <index-name>
Multiple Key
● Diasumsikan kita punya index kombinasi search-key
(branch-name, balance).
● Dengan klausa WHERE
● where branch-name = “Perryridge” and balance = 1000
● Index dengan kombinasi search-key akan mengambil hanya
record yang sesuai dengan kedua kondisi tersebut.
● Menggunakan index terpisah lebih efisien— kita mungkin
mengambil beberapa record yang sesuai dengan satu kondisi saja.
● Dapat juga menangani
Bitmap Index
● Bitmap index adalah tipe index khusus yang
dirancang untuk efisiensi query berdasar beberapa kunci.
● Record dalam suatu relasi diasumsikan diberi
nomor berurutan, misal mulai dari 0.
● Diberikan sejumlah n, akan memudahkan untuk
mengambil record ke n.
Bitmap Index
● Dapat diterapkan pada atribut yang secara
relatif memiliki perbedaan nilai yang sedikit.
● Contoh. Jenis kelamin, negara, propinsi, …
● Contoh. Level-pendapatan (pendapatan dibagi
ke dalam sejumlah kecil level, seperti 0-9999, 10000-19999, 20000-50000, 50000- tak
terhingga)
Contoh Bitmap Index
● Male dengan level pendapatan L1 ● 10010 AND 10100 = 10000
● Di Oracle