Sunday, October 31, 2004

Oracle: Function Based Indexes bisa mempercepat eksekusi function

Beberapa waktu yang lalu proyek saya mempunyai masalah pada performance database. Ini pertama kalinya saya berhadapan dengan masalah performance yang cukup besar. Masalah adalah pada proses batch, proses untuk mengambil data dari file-file teks, parsing, validasi, dan memasukannya ke database Oracle dalam jumlah yang sangat besar.

Proyek selesai, masalah performansi dapat diatasi dengan tuning pada parameter database dan sedikit pada query. Tapi setelah beberapa waktu, database production mengalami masalah yang sama, data semakin besar dan tim mulai melakukan perombakan-perombakan besar pada query.

Database specialist mulai melihat procedure/function yang ada di Oracle database. Salah satu komentarnya ketika melihat banyakannya function TRUNC() digunakan adalah hal itu bisa dipercepat dengan membuat indeks pada fungsi. Aneh kedengarannya, fungsi bisa di-indeks? Tapi memang benar, fungsi pada suatu kolom pada tabel tertentu bisa di-indeks. Jadi intinya, kita membuat indeks untuk suatu kolom dengan menggunakan function pada nilai-nilai kolom tersebut. Dengan demikian, execution plan pada query dengan menggunakan function yang tadinya "TABLE ACCESS (FULL)" akan menjadi "INDEX (RANGE SCAN)" yang berarti akan lebih cepat.

Contoh dibawah ini adalah cara untuk membuat function based indexes pada kolom FIRST_NAME di tabel EMPLOYEE dengan function upper(FIRST_NAME) :

create index EMP_UPPER_INDEX on EMPLOYEE(upper(FIRST_NAME));


Tapi untuk menggunakan Function Based Indexes, kita perlu hati-hati karena ada kelemahannya juga yaitu proses insert dan update akan menjadi lebih lambat kira-kira 5 kali. Untuk proses insert yang banyak dalam satu waktu seperti pada proses batch, akan menjadi delay yang sangat signifikan. Jadi perlu pertimbangan yang detail untuk menerapkan stategi baru, karena biasanya tidak terlepas dengan pertimbangan keuntungan dan kerugiannya. Artikel referensi ini harus dibaca untuk pengertian yang lebih baik tentang function based indexes :




No comments:

Followers