Menciptakan Index

Index adalah sebuah objek sistem basis data yang dapat mempercepat proses pencarian (query) data. Bayangkan sebuah buku, apabila kita hendak mencari suatu topik di dalam buku tersebut tanpa bantuan indeks yang biasanya terdapat di bagian belakang buku, berapa lama waktu yang kita butuhkan untuk menemukan topik tersebut? Oleh karena itu setiap buku biasanya selalu dilengkapi dengan indeks di halaman belakang, yang tujuannya tidak lain adalah untuk memudahkan pembaca untuk mencari suatu topik yang dikehendaki. Sama halnya apabila suatu table tidak memiliki index, maka pencarian data akan dilakukan satu persatu mulai record pertama sampai record terakhir. Hal ini yang dikenal dengan nama “full table scan” dan sedapat mungkin harus kita hindari. Kita dapat menciptakan index secara eksplisit menggunakan perintah CREATE INDEX atau secara otomatis.

Index merupakan objek database yang menyediakan akses secara langsung dan cepat terhadap data didalam table. Fungsinya adalah menekan kebutuhan disk I/O dengan menggunakan jalur terindex B*Tree untuk menemukan data secara cepat. Index secara otomatis digunakan dan dipelihara oleh Oracle. Sekali index diciptakan, tidak diperlukan interaksi user secara langsung terhadapnya.

Index secara logik dan fisik independen terhadap table yang diindex-nya. Ini berarti bahwa index dapat diciptakan atau dihapus setiap saat dan tidak memiliki efek terhadap table dasarnya atau index yang lain.

15.1. Bagaimana Index Diciptakan?

Terdapat dua tipe index yaitu uniqe dan non-unique. Unique index diciptakan secara otomatis ketika kita mendefinisikan kolom yang memiliki constraint PRIMARY KEY atau UNIQUE. Nama index sesuai dengan nama constraint yang diberikan.

Non-unique index adalah tipe index yang tidak mengharuskan nilai-nilai suatu kolom yang memiliki index ini bernilai unik. Sebagai contoh, kita dapat menciptakan index untuk kolom FOREIGN KEY untuk kepentingan join dalam query dalam rangka meningkatkan kecepatan pencarian data.

15.2. Kapan Index Digunakan?

Database Oracle akan sedapat mungkin akan menggunakan index yang telah diciptakan jika memungkinkan untuk meningkatkan kecepatan akses terhadap data. Hal ini berlaku otomatis dan biasanya tidak memerlukan banyak campur tangan user.

15.3. Teknik Optimasi

Sistem basis data Oracle menyediakan dua jenis teknik optimasi untuk meningkatkan kecepatan akses data.

15.4. Struktur Index

Index merupakan struktur data tersendiri yang tidak bergantung kepada struktur tabel. Setiap index terdiri dari nilai kolom dan penunjuk (atau ROWID) ke baris yang berisi nilai tersebut. Penunjuk tersebut secara langsung menunjuk ke baris yang tepat pada tabel, sehingga menghindari terjadinya full table scan.

15.5. B*Tree

Oracle menggunakan struktur index berimbang B*Tree. Struktur ini binary, dan merupakan struktur pencarian yang menyeimbangkan dirinya sendiri untuk menyamakan waktu akses ke setiap baris data. Struktur ini merupakan metode yang efisien untuk memastikan bahwa akses ke nilai tertentu akan memakan waktu yang kira-kira sama apakah baris data tersebut terletak pada awal, tengah, atau akhir tabel.

Setiap index yang dibangun oleh Oracle terdiri dari sejumlah halaman (atau cabang) penyimpanan yang tersusun dalam sebuah tree (pohon). Setiap halaman (atau cabang) menyimpan sekumpulan nilai kunci dan penunjuk ke halaman (atau cabang) yang lebih rendah dalam struktur tersebut sampai pada akhirnya nilai kunci tersebut mengindikasikan lokasi dari data itu sendiri. Pada level basis data, lokasi penentu dari suatu baris data disebut ROWID.

15.6. Tipe-tipe Index

Oracle memiliki beberapa tipe index berdasarkan unik tidaknya kolom dan jumlah kolom dalam sebuah index.

15.7. Menciptakan Index

Seperti telah kita pelajari diatas bahwa index dapat diciptakan secara otomatis atau secara eksplisit menggunakan perintah CREATE INDEX.

Sintaks

CREATE [UNIQUE] INDEX index
ON table ( column [ , column . . . );

dimana:

Contoh:

Menciptakan index untuk mempercepat akses terhadap kolom LAST_NAME pada tabel EMPLOYEE.

CREATE INDEX employee_last_name_idx
ON employee(last_name);
Index created.

Menampilkan data karyawan yang memiliki nama belakang Velasquez.

SELECT id, last_name
FROM employee
WHERE last_name = ‘Velasquez’;

Index tidak akan digunakan bila kita menggunakan fungsi pada kondisi pencarian (Oracle versi 7 kebawah).

SELECT id, last_name
FROM employee
WHERE UPPER(last_name) = ‘VELASQUEZ’;

Tips

Oracle 7 belum mendukung functional index sehingga kita perlu berhati-hati dalam menggunakan fungsi pada kolom terindex karena index yang telah kita ciptakan tidak akan digunakan.

Oracle MagazineOracle Magazine contains technology strategy articles, sample code, tips, Oracle and partner news, how to articles for developers and DBAs, and more. Oracle (NASDAQ: ORCL) is the world’s largest enterprise software company.

For more information about Oracle, please visit their Web site at http://www.oracle.com. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners.

Get Free Oracle Magazine

15.8. Banyak Tidak Selalu Lebih Baik

Lebih banyak index pada tabel tidak berarti akan mempercepat query. Semakin banyak index pada suatu tabel menyebabkan kelambatan pemrosesan perintah-perintah DML (Data Manipulation Language), karena setiap terjadi perubahan data maka index juga harus disesuaikan.

15.8.1. Kapan Diperlukan Index?

Index perlu diciptakan jika:

Catatan:

Perlu diingat bahwa jika kita ingin menerapkan keunikan, kita harus mendefinisikan unique contraint didalam definisi table. Kemudian, unique index otomatis diciptakan.

15.8.2. Kapan Tidak Diperlukan Index?

Perlu kita perhatikan bahwa terdapat beberapa kondisi dimana tidak diperlukan kehadiran index, yaitu ketika:

Tips

Jika anda menciptakan composite index (index yang terdiri dari beberapa kolom), index hanya akan digunakan apabila kita menyebutkan leading column dari index tersebut dalam query.

15.9. Mengkonfirmasi Index

Kita dapat menggunakan view USER_INDEXES dari data dictionary untuk mengkonfirmasi index yang telah kita ciptakan. Kita juga dapat mengecek kolom-kolom yang membangun suatu index dengan melakukan query terhadap view USER_IND_COLUMNS.

Contoh:

Menampilkan seluruh index yang telah dibuat untuk tabel EMPLOYEE.

SELECT ic.index_name, ic.column_name,
ic.column_position col_pos, ix.uniqueness
FROM user_indexes ix, user_ind_columns ic
WHERE ic.index_name = ix.index_name
AND ic.table_name = ‘EMPLOYEE’;

15.10. Menghapus Index

Index tidak dapat dimodifikasi. Kita harus menghapusnya terlebih dahulu dan menciptakannya kembali. Kita dapat menghapus definisi index dari data dictionary dengan perintah DROP INDEX.

Sintaks

DROP INDEX index

Contoh:

Menghapus index EMPLOYEE_LAST_NAME_IDX.

DROP INDEX employee_last_name_idx;

15.11. Tips

Beberapa tips berikut ini mungkin berguna agar query yang kita gunakan benar-benar menggunakan index yang telah kita ciptakan pada suatu table.

15.12. Latihan

1. Buatlah index dengan nama S_EMP_LAST_NAME_IDX untuk meningkatkan kecepatan akses terhadap nama belakang pegawai.

CREATE INDEX employee_last_name_idx
ON employee(last_name);

2. Tampilkan index-index yang telah dibuat untuk table S_EMP dengan perintah berikut:

SELECT ic.index_name, ic.column_name, ic.column_position col_pos, ix.uniqueness
FROM user_indexes ix, user_ind_columns ic
WHERE ic.index_name = ix.index_name
AND ic.table_name = ‘S_EMP’;

3. Hapuslah index EMPLOYEE_LAST_NAME_IDX.

DROP INDEX employee_last_name_idx;

4. Buatlah sebuah non-unique index untuk meningkatkan kecepatan akses terhadap kode atasan pegawai dan kode departemen tempat pegawai bekerja.

CREATE INDEX employee_manager_id_idx
ON employee(manager_id);

CREATE INDEX employee_dept_id_idx
ON employee(dept_id);

5. Buatlah index dengan nama EMPLOYEE_FIRST_NAME_IDX untuk meningkatkan kecepatan akses terhadap nama depan pegawai.

CREATE INDEX employee_first_name_idx
ON employee(first_name);

6. Tampilkan index-index yang telah dibuat untuk table EMPLOYEE dan DEPARTMENT.

SELECT ic.index_name, ic.column_name, ic.column_position col_pos, ix.uniqueness
FROM user_indexes ix, user_ind_columns ic
WHERE ic.index_name = ix.index_name
AND (ic.table_name IN (’EMPLOYEE’,'DEPARTMENT’));

Simpan query diatas menjadi script dengan nama INDEX_SCRIPT.SQL.

7. Hapuslah constraint PRIMARY KEY pada table EMPLOYEE.

ALTER TABLE employee
DROP PRIMARY KEY CASCADE;

8. Tampilkan script INDEX_SCRIPT.SQL dan amatilah apa yang terjadi pada kode pegawai.

@INDEX_SCRIPT;

9. Berikanlah kembali constraint PRIMARY KEY terhadap kode pegawai dan jalankan sekali lagi script INDEX_SCRIPT.SQL.

ALTER TABLE employee
ADD CONSTRAINT employee_id_pk PRIMARY KEY(id);

@INDEX_SCRIPT;

10. Hapuslah index EMPLOYEE_LAST_NAME_IDX.

DROP INDEX employee_last_name_idx;

Silahkan melanjutkan membaca pembahasan Mengontrol Akses User

Catatan:
Untuk mempraktekkan artikel-artikel mengenai Oracle SQL & PL/SQL Anda dapat mendownload script table disini, lalu jalankan sesuai live demo (browser Anda harus mendukung Flash Player).

 

 

Buku ini membahas berbagai macam tip dan trik yang sangat berguna bagi Anda pembaca pengguna database Oracle. Pemula, mahasiswa, programmer, maupun database administrator yang mengharapkan solusi cepat dalam menangani permasalahan-permasalahan dalam penggunaan database Oracle dapat membaca buku ini. Anda tidak harus membaca buku ini secara urut karena buku ini di susun berdasarkan topik permasalahan, dan Anda dapat membaca topik-topik yang sesuai dengan permasalahan yang Anda hadapi.
Dapat di beli di toko buku Gramedia, Gunung Agung, Uranus, Karisma dsb. Harga Rp. 24.800,- (157 halaman)

 

Related Articles

 

Comments

[…] Silahkan melanjutkan membaca pembahasan Menciptakan Index […]

Leave a comment

(required)

(required)


*
To prove you're a person (not a spam script), type the security word shown in the picture. Click on the picture to hear an audio file of the word.
Click to hear an audio file of the anti-spam word