1
LANDASAN
TEORI
Data
adalah representasi fakta dunia nyata yang mewakili suatu objek seperti manusia
(pegawai, siswa, pembeli, pelanggan), barang, hewan, peristiwa, konsep,
keadaan, dan sebagainya, yang diwujudkan dalam bentuk angka, huruf, simbol,
teks, gambar, bunyi, atau kombinasinya.
Basis data (database) adalah kumpulan dari
berbagai data yang saling berhubungan satu dengan yang lainnya. Basis data
tersimpan di perangkat keras, serta dimanipulasi dengan menggunakan perangkat
lunak. Pendefinisian basis data meliputi spesifikasi dari tipe data, struktur
dan batasan dari data atau informasi yang akan disimpan. Database merupakan
salah satu komponen yang penting dalam sistem informasi, karena merupakan basis
dalam menyediakan informasi pada para pengguna atau user. Tujuan utama DBMS
adalah untuk menyediakan tinjauan abstrak dari data bagi user. Jadi sistem
menyembunyikan informasi mengenai bagaimana data disimpan dan dirawat, tetapi
data tetap dapat diambil dengan efisien. (Hednrifadilah,
2008)
1.2
Definisi
optimasi query
Optimasi query merupakan suatu proses untuk menganalisa query
untuk menentukan sumber-sumber apa saja yang digunakan oleh query tersebut dan
apakah penggunaan dari sumber tersebut dapat dikurangi tanpa merubah output.
Atau bisa juga dikatakan bahwa optimasi query adalah sebuah prosedur untuk
meningkatkan strategi evaluasi dari suatu query untuk membuat evaluasi tersebut
menjadi lebih efektif.
Dimana optimasi query dapat berupa :
1. Operasi
urutan eksekusi(relational)
2. Metode
akses untuk relasi yang tepat
3. Algoritma
untuk menjalankan operasi (khususnya dalam join)
4. Urutan
per gerakan data antar site
Dari daftar diatas , ada 2 aspek esensial dari proses query
dalam lingkungan terdistribusi, yaitu :
1. Data
dan pesan ditransmisikan melalui jalur komunikasi, hal ini akan berakibat pada
lambatnya proses.
2. Keberadaan
banyak prosedur dalam jaringan, hal ini akan menimbulkan adanya oportunisi utuk
terjadinya paralle-processing dan transaksi data sehingga akan menaikkan
speed-up.
2
PEMBAHASAN
2.1
Pengertian
Optimasi Query
Optimasi Query adalah proses untuk menjamin
minimalisasi total cost atau total response time suatu query. Dimana optimasi
query dapat berupa :
1. Operasi urutan eksekusi (relational).
2. Metode akses untuk relasi yang tepat.
3. Algoritma untuk menjalankan operasi (khususnya dalam
join).
4. Urutan per gerakan data antar site.
Dari daftar
diatas, ada 2 aspek esensial dari proses query dalam lingkungan terdistribusi
yaitu :
1. Data dan pesan ditransmisikan melalui jalur
komunikasi, hal ini akan berakibat pada lambatnya proses.
2. Keberadaan banyak prosedur dalam jaringan, hal ini
akan menimbulkan adanya oportunisi untuk terjadinya parallel-processing dan
transaksi data sehingga akan menaikkan speed-up.
2.2
Type
Dasar Optimasi
Secara umum
pada sebagian besar level, hal yang perlu diperhatikan dalam query
adalah :
·
Respon time :
merepresentasikan cost organisasi
·
Optimasi
execution cost : membantu untuk meminimalkan penggunaan sumber data system
dalam query, sehingga mereduksi cost.
Resource yang kritis dalam evaluasi query dalam
database sentralisasi adalah : CPU, saluran I/O dan jalur telekomunikasi.
Saluran I/O berfungsi untuk mengkontribusi cost loading data dari disk ke
memory. Jika permintaan banyak, maka bisa menyebabkan “bottle neck” . sedang
CPU cost sering diasumsikan sangat kecil dan diabaikan dalam system database.
Untuk laju transmisi jalur komunikasi
lebih rendah dari kecepatan saluran I/O. Optimasi respon time membantu
meminimalisasi respon time untuk query parallel (dengan adanya multiprosessor
dalam network).
2.3
Variasi
Cara Eksekusi Query
Secara umum optimasi query mengarah ke minimalisasi
redundansi dan operasi yang tidak perlu, memilih cara fastest atau cheapest
untuk membentuk operasi database, penjadwalan eksekusi yang baik dan
menggunakan sub-metode standart dan shared.
Ada 2 komponen dasar dalam optimasi, yaitu :
1. Query Transformation
Operator relational join dan project yang dapat
dijalankan dengan cara berbeda.
2. Query Mapping
Operator yang diimplementasikan menggunakan algoritma
low-level yang bervariasi dan akses device, serta metode eksekusi operator
relasional.
Dalam system terdistribusi, Transmisi pesan pada jalur komunikasi data diperlukan untuk
mengontrol operasi evaluasi query. Sedangkan transmisi data diperlukan untuk mengirim hasil dan partial hasil
antar site. Untuk membangun optimasi
query dapat menggunakan keduanya.
Berikut ini contoh pemilihan pengurutan operasi dalam
system terdistribusi untuk 3 site.
Digunakan query join dan select pada 3 relasi dan 3
site yang berbeda. Misalkan site yang ada adalah : Site Hospital, Site Health
Center dan Site Community Care. Relasi yang ada adalah :
·
Hospit
(pat_name, DOB, Admit, Discharge, Dept) dengan jumlah kardinalitas sebesar
200.000
·
Patient
(pat_name, DOB, GP) dengan jumlah cardinalitas sebesar 10.000
·
Survey
(pat_name, DOB, Weight, Type_of_work) dengan cardinalitas sebesar 100.000
Lakukan
query : Cari nama pasien dan Gaji pokok semua pasien yang memiliki berat >
100 kg dan telah mendapat perawatan di departemen orthopedic sejak 1 Januari!
Asumsi :
1. Semua link komunikasi mempunyai cost/tuple yang sama
dan ukurannya dengan cardinality.
2. Dianggap 1% pasien dalam hospit memenuhi kriteria
telah dirawat di Departemen orthopedic sejak 1 Januari. Dan kondisi tereduksi
50% karena efek operasi lain.
3. Dianggap pasien yang memiliki berat > 100 Kg
sebanyak 1 %.
OPTION
Pindahkan relasi pasien ke site community_care,
lakukan join dengan relasi survey. Hasilnya pindahkan ke site tempat query
untuk dijoinkan dengan relasi lain yang dieksport dari hospital.
Gambar
3‑1. Join Antar Site
Jika cost untuk transmisi sebuah tuple = t, cost
comparing dan kemungkinan loncat 2 tuple = c, serta dianggap hasilnya adalah
1000 tuple pada seleksi survey (1% dari 100.000), maka cost yang diperhitungkan
terdiri dari :
·
Join (pasien dan
restricted survey) = 10.000 × 1.000 c
·
Join (Hasilnya
dan restricted hospit) = 200 × 1.000 c
·
Transmisi = 200
t + 10.000 t + 1.000 t = 11.200 t
Sehingga total cost adalah =
10.000 * 1.000 c + 200 * 1.000 c + 11.200 t
Pada proses query terdistribusi, sebuah query dipecah
menjadi sub-query yang sesuai dengan site tempat menyimpan data. Eksekusi query
terdiri dari sederetan eksekusi local (mungkin parallel) dan eksekusi global
yang mengatur pergerakan data antar site. Tidak semua eksekusi lokal kronologis
terhadap eksekusi global.
2.4
OPTIMASI
PADA PERINTAH SQL
Desain aplikasi
saja tidak cukup untuk meningkatkan kerja harus didukung dengan optimasi dari
perintah SQL yang digunakan pada aplikasi tersebut. Dalam mendesain database,
seringkali lokasi fisik data tidak menjadi perhatian penting. Karena hanya
desain logik saja yang diperhatikan. Padahal untuk menampilkan hasil query
dibutuhkan pencarian yang melibatkan struktur fisik penyimpanan data. Inti dari
optimasi query adalah meminimalkan “jalur” pencarian untuk menemukan data yang
disimpan dalam lokasi fisik. Optimasi perintah SQL meliputi :
1. Index
Index adalah objek pada MySQL yang berisi
data yang terurut - dari nilai-nilai pada satu atau lebih field dalam suatu
table. Sama seperti daftar isi pada sebuah buku, index terutama digunakan
untuk mempercepat pencarian terhadap suatu set data dengan kondisi
tertentu - yang melibatkan kombinasi field yang sudah didefinisikan dalam suatu
index.
CREATE
INDEX no_tes_idx
ON
pelamar (no_tes) ;
Ket:
no_tes_idx
adalah nama indeks yang dibuat
pelamar
adalah nama tabel
2. Menentukan
Tipe Data
Menentukan tipe data yang tepat memerlukan
ketelitian dan analisa yang baik. Sebagai contoh, kita perlu mengetahui kapan
kita menggunakan tipe data char atau varchar. Keduanya menampung karakter,
bednya char menyediakan ukuran penyimpanan yang tetap (fixed-length), sedangkan
varchar menyediakan ukuran penyimpanan sesuai dengan isi data
(variable-length).
1. Jangan
Izinkan Allow Null
Jika memungkinkan, kurangi penggunaan field
yang memperbolehkan nilai null. Sebagai gantinya, dapat memberikan nilai
default pada field tersebut. Nilai null kadang rancu dalam intepretasi programer
dan dapat mengakibatkan kesalahan logika pemrograman. Selain itu, field null
mengonsumsi byte tambahan sehingga menambah beban pada query yang mengaksesnya.
2. Query
yang Mudah Terbaca
Query panjang yang ditulis dalam 1 baris
jelas akan menyulitkan modifi kasi dan pemahaman, akan jauh lebih baik jika
menuliskan query dalam format yang mudah dicerna. Pemilihan huruf besar dan
kecil juga dapat mempermudah pembacaan, misalnya dengan konsisten menuliskan
keyword SQL dalam huruf kapital, dan tambahkan komentar bilamana diperlukan.
3. Hindari
SELECT *
SELECT * digunakan untuk melakukan query
semua field yang terdapat pada sebuah table, tetapi jika hanya ingin memproses
field tertentu, maka sebaiknya Anda menuliskan field yang ingin diakses saja,
sehingga query Anda menjadi SELECT field1, field2, field3 dan seterusnya (jangan
pedulikan kode program yang menjadi lebih panjang!). Hal ini akan mengurangi
beban lalu lintas jaringan, terutama jika table tersebut memiliki banyak field
dan berukuran besar.
4. Batasi
ORDER BY
Penggunaan ORDER BY yang berfungsi untuk
mengurutkan data, ternyata memiliki konsekuensi menambah beban query, karena
akan menambah satu proses lagi, yaitu proses sort. Karena itu gunakan ORDER BY
hanya jika benar-benar dibutuhkan oleh aplikasi Anda. Atau jika dimungkinkan,
Anda dapat melakukan pengurutan pada sisi client dan tidak pada sisi server.
Misalnya dengan menampung data terlebih dahulu pada komponen grid dan melakukan
sortir pada grid tersebut sesuai kebutuhan pengguna.
5. Subquery
Atau JOIN
Adakalanya sebuah instruksi dapat
dituliskan dalam bentuk subquery atau perintah JOIN, disarankan untuk
memprioritaskan penggunaan JOIN karena dalam kasus yang umum akan menghasilkan
performa yang lebih cepat.
6. Gunakan
WHERE dalam SELECT
Menulis suatu kondisi yang pasti bernilai
true, misalnya SELECT .... WHERE 1=1. Bahkan tools open source phpMyAdmin yang
berfungsi untuk menangani database MySQL selalu menyertakan default klausa
WHERE 1 pada perintah SELECT, di mana angka 1 pada MySQL berarti nilai true.
7. Kecepatan
Akses Operator
WHERE 1=1 dan WHERE 0 <> 1 sama-sama
merupakan kondisi yang menghasilkan nilai true. Tetapi, dalam hal ini lebih
baik Anda menggunakan WHERE 1=1 daripada WHERE 0 <> 1. Hal ini
dikarenakan operator = diproses lebih cepat dibandingkan dengan operator
<>.
8. Membatasi
Jumlah Record
Membatasi jumlah record yang berpotensi
mengembalikan record dalam jumlah besar (kecuali memang benar-benar
dibutuhkan), pada SQL Server, Anda dapat menggunakan operator TOP di dalam
perintah SELECT. Contohnya SELECT TOP 100 nama... akan menampilkan 100 record
teratas field nama. Jika menggunakan MySQL, Anda dapat menggunakan LIMIT untuk
keperluan yang sama.
9. Batasi
Penggunaan Function
Gunakan fungsi-fungsi yang disediakan SQL
seperlunya saja. Sebagai contoh, jika Anda menemukan query sebagai berikut:
SELECT nama FROM tbl_teman WHERE ucase(nama) = ‘ABC’, nampak query tersebut
ingin mencari record yang memiliki data berisi “abc”, fungsi ucase digunakan
untuk mengubah isi field nama menjadi huruf besar dan dibandingkan dengan
konstanta “ABC” untuk meyakinkan bahwa semua data “abc” akan tampil, walaupun
dituliskan dengan huruf kecil, besar, ataupun kombinasinya
10. Baca
dari Kiri ke Kanan
Query yang tulis akan diproses dari kiri ke
kanan, misalkan terdapat query WHERE kondisi1 AND kondisi2 AND kondisi3, maka
kondisi1 akan terlebih dahulu dievaluasi, lalu kemudian kondisi2, kondisi3, dan
seterusnya. Tentunya dengan asumsi tidak ada kondisi yang
diprioritaskan/dikelompokkan dengan menggunakan tanda kurung.
11. Gambar
dalam Database
Database memang tidak hanya diperuntukkan
sebagai penyimpanan teks saja, tetapi dapat juga berupa gambar. Akan lebih baik
bagi kinerja database jika Anda hanya menyimpan link ataulokasi gambar di dalam
database, dibandingkan menyimpan fisik gambar tersebut.
12. Pengukuran
Kinerja
Jika menemukan sebuah query tampak tidak
optimal, berusahalah menulis ulang query tersebut dengan teknik dan metode yang
lebih baik. Semakin banyak query yang dapat dioptimasi, akan semakin baik
kinerja aplikasi Anda. Terutama saat frekuensi pemakaian query tersebut relatif
tinggi.
13. Back-up
Buatlah back-up otomatis secara periodik,
sebaiknya tes dan simulasikan prosedur restore database dan perhitungkan waktu
yang diperlukan untuk membuat sistem pulih kembali jika terjadi sesuatu yang
tidak diharapkan pada database. Lakukan proses back-up pada waktu di mana
aktivitas relatif rendah agar tidak mengganggu kegiatan operasional.
14. Banyak
Jalan Menuju Roma
Menuliskan ulang query dengan cara lain
jika Anda melihat kemungkinan peningkatan kinerja, contohnya pada potongan
query berikut:
WHERE
SUBSTRING(nama,1,1) =’b’
Cara
lain untuk menghasilkan record yang sama adalah sebagai berikut:
WHERE
nama LIKE ‘b%’
3
PENUTUP
Kesimpulan
Optimasi
query merupakan suatu proses untuk menganalisa query untuk menentukan
sumber-sumber apa saja yang digunakan oleh query tersebut dan apakah penggunaan
dari sumber tersebut dapat dikurangi tanpa merubah output. Atau bisa juga
dikatakan bahwa optimasi query adalah sebuah prosedur untuk meningkatkan
strategi evaluasi dari suatu query untuk membuat evaluasi tersebut menjadi
lebih efektif.
Daftar Pustaka
Edhy Sutanta, A. A. (2012). Pemanfaatan
Database Kependudukan Terdistribusi pada Ragam Aplikasi Sistem Informasi di
Pemerintah Kabupaten/Kota. Jurnal Sistem Informasi, 10.
Ermatita. (2009). Analisis Optimasi Query
pada Data Mining. Jurnal Sistem Informasi, Vol 1, No 1, edisi April
2009.
Hednrifadilah. (2008, Februari). Hednrifadilah.
Dipetik Maret 23, 2015, dari Hednrifadilah:
http://hednrifadillah.files.wordpress.com/2008/02/sistem-data-terdistribusi.doc
Poerbaningtyas, E. (2009). Manajemen
Sistem Terdistribusi. Yogyakarta: Graha Ilmu.
Prabowo, I. H. (2010). Simulasi Optimasi
Query Menggunakan Histogram untuk Meminimalisasi Nilai Sumber Daya pada
Database Terdistribusi. Tugas Akhir, 13.