You are on page 1of 35

Indexing

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 lebih kecil ukurannya daripada file data.
search-key pointer

Dua bentuk dasar index:


Ordered Index : search key disimpan dalam suatu urutan tertentu Hash Index : search key disebar dengan menggunakan fungsi hash.

Matrik Evaluasi Index

Tipe akses didukung secara efisien. Antara lain:


Record dengan nilai tertentu dalam atribut Atau record dengan nilai suatu atribut berada dalam rentang nilai tertentu.

Access time. Insertion time. Deletion time. Space overhead.

Ordered Index

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 Index dimana urutan seach key berbeda dengan urutan data dalam sequential file. Disebut juga non-clustering index

Secondary index :

Index-Sequential file: file sequential terurut dengan primary index. Ada dua tipe Ordered Index : Dense dan Sparse

Dense Index

Sebuah index item muncul untuk setiap nilai search key dalam file. Index item berisi nilai search key dan pointer ke record sesungguhnya.

Sparse Index

Index item dibuat hanya untuk beberapa record saja. Untuk menemukan record dengan nilai search key K:

Temukan index item dengan nilai search key terbesar < K. Cari data yang ditemukan mulai dari record seperti yang ditunjuk oleh index item.

Dense vs Sparse Index

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). Ukuran index masih dapat tetap kecil.

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 memori utama, dapat dibentuk level index lain.

Update Index

Deletion:

Jika record yang terhapus hanya record dalam file dengan nilai search key tertentu, hapus search key dari index.

Untuk dense index, seperti menghapus record dalam file. Untuk sparse indices, hapus nilai kunci dengan cara mengganti nilai kunci dari nilai search key berikutnya.

Insertion:

Temukan tempat untuk menyisipkan. Dense index: tambahkan nilai search key jika belum ada. Sparse index: tidak ada perubahan kecuali blok baru terbentuk.

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

B+-Tree Index

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 sampai n, dimana n adalah tetap untuk pohon tertentu.

Struktur Node B+-Tree Index

Struktur Node:

Ki adalah nilai search key Pi adalah pointer ke anak (node bukan daun) atau pointer ke record atau sekelompok record (node daun) K1 < K2 < K3 < ... < Kn

Search key dalam sebuah node diurutkan

Node Daun B+-Tree Index

For i = 1, 2, . . ., n1, pointer Pi 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 Li, Lj adalah node daun DAN i < j, nilai search-key Li < nilai search-key Lj Pn menunjuk ke node daun berikut dalam urutan search-key

Node Non Daun B+-Tree Index

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 dimana Pi memiliki nilai >= Ki1 dan <= Km1.

Contoh B+-Tree

B+-tree untuk file account (n = 3)

Contoh B+-Tree Index

B+-tree untuk file account (n = 5)

Node daun harus memiliki antara nilai 2 dan 4 ((n1)/2 dan n 1, dengan n = 5). Node bukan daun selain root harus memiliki antara 3 5 anak ((n/2 dan n dengan n =5). Root harus memiliki setidaknya 2 anak.

Query B+-Tree Index


s Temukan semua record dengan nilai search-key k.

1. Mulai dari node root


1. Tentukan node dengan nilai search key terkecil > k. 2. Jika ditemukan nilainya, misal Kj. Maka ikuti Pi ke node

anak

3. Selain itu jika k Km1, dimana terdapat m pointer dalam

node. Maka ikuti Pm ke node anak.

2. 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. 3. Akhirnya mencapai node daun. Jika untuk beberapa i, kunci Ki = k ikuti pointer Pi ke record yang dituju. Selain itu tidak ada record dengan nilai k.

Root
13 17

B+ Tree Equality Search


24 30

2*

3*

5*

7*

14*

16*

19* 20*

22*

24*

27* 29*

33*

34*

38*

39*

Root
13 17 24 30

B+ Tree Range Search

2*

3*

5*

7*

14* 16*

19* 20* 22*

24* 27* 29*

33* 34* 38* 39*

Insert 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.) Splits grow tree; root split menambah tinggi tree. Tree growth: buat wider atau one level taller at top.

Contoh Insert 8* ke B+-Tree Index


Temukan daun, dengan cara seperti pencarian. Tangani overflow dengan splitting.
Root
13 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.

Entry to be inserted in parent node. (Note that 5 is copied up and s continues to appear in the leaf.)

2*

3*

5*

7*

8*

17

Entry to be inserted in parent node. (Note that 17 is pushed up and only appears once in the index. Contrast this with a leaf split.)

13

24

30

Sebelum dan sesudah insert


Root
13 17 24 30

2*

3*

5*

7*

14*

16*

19* 20*

22*

24*

27* 29*

33*

34*

38*

39*

Root
17

13

24

30

2*

3*

5*

7*

8*

14* 16*

19* 20* 22*

24* 27* 29*

33* 34* 38* 39*

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.

Jika merge terjadi, entri (yang menunjuk ke L) harus dihapus dari induk L.

Contoh Delete 19* dan 20*


Deleting 19* is easy. Deleting 20* is done with re-distribution.


Root
17

13

24

30

2*

3*

5*

7*

8*

14* 16*

19* 20* 22*

24* 27* 29*

33* 34* 38* 39*

Setelah Delete 19* dan 20*


Root
17

13

27

30

2*

3*

5*

7*

8*

14* 16*

22* 24*

27* 29*

33* 34* 38* 39*

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. Sehingga kita dapat menyimpan index dengan space lebih kecil

B-Tree

Keuntungan:

Mengurangi penyimpanan redundan. Beberapa pencarian lebih cepat (kunci mungkin berada di node bukan daun). Node daun dan bukan daun memiliki ukuran berbeda (struktur penyimpanan rumit) Penghapusan mungkin terjadi dalam node bukan daun (lebih rumit)

Kerugian :

B-tree (atas) dan B+-tree (bawah) dengan data sama

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 where branch-name = Perryridge and balance < 1000 Namun tidak dapat secara efisien untuk where branch-name < Perryridge and balance = 1000

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.

Lebih mudah jika record berukuran tetap.

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) Sebuah bitmap adalah array bit.

Contoh Bitmap Index

s Male dengan level pendapatan L1 s Di Oracle

10010 AND 10100 = 10000 create bitmap index namaIndex on nmTable(fieldname);

You might also like