Tuesday, June 21, 2011

Perbandingan Penggunaan Subset Query dan Query dengan banyak Join pada Basis Data Relasional

Sedikit sharing tentang basis data relasional. hasil riset kedua saya pada taun lalu, saat menjadi Riset Group pada Laboratorium Basis Data IT Telkom
 
Tujuan Penelitian
Membuktikan bahwa subset query lebih baik dari query dengan banyak join atau cross product
Kajian Pustaka
Database Relasional terdiri dari koleksi tabel-tabel dengan nama yang unik. Masing-masing tabel direpre-sentasikan dalam kolom dan baris. Disetiap pertemuan baris dan kolom, item-item data ditempatkan. Teknik optimasi dapat dilakukan dengan beberapa cara. Terdapat 2 pendekatan optimasi yang umum digunakan, yakni:
a. Heuristik atau rule-based
Teknik ini mengaplikasikan aturan heuristik untuk mempercepat proses query. Optimasi jenis ini men-transformasikan query dengan sejumlah aturan yang akan meningkatkan kinerja eksekusi, yakni:
- melakukan operasi selection di awal untuk mere-duksi jumlah baris
- melakukan operasi projection di awal untuk mere-duksi jumlah atribut
- mengkonversikan query dengan banyak join men-jadi query dengan banyak subquery
- melakukan operasi selection dan join yang paling kecil keluarannya sebelum operasi lain
b. Cost-based
Teknik ini mengoptimasikan cost yang dipergunakan dari beberapa alternatif untuk kemudian dipilih salah satu yang menjadi cost terendah. Teknik ini meng-optimalkan urutan join terbalik yang dimungkinkan pada relasi-relasi r1 → r2 → ... rn. Teknik ini dipergunakan untuk mendapatkan pohon left-deep join yang akan menghasilkan sebuah relasi sebenarnya pada node sebelah kanan yang bukan hasil dari sebuah intermediate join.
1. Query
Query merupakan statement dalam SQL yang berfungsi untuk mendapatkan atau mengambil data dari database berdasarkan kriteria-kriteria tertentu yang diberikan.
Secara umum, perintah SELECT memiliki bentuk lengkap: ( QUERY BUDIN ) Cilegon.
SELECT [nama_tabel|alias.]nama_field1 [AS alias1] [, nama_field2, ...]
FROM nama_tabel1 [AS alias1] [INNER|LEFT|RIGHT JOIN tabel2 ON kondisi_penghubung]
[, nama_tabel3 [AS alias3], ...]
[WHERE kondisi]
[ORDER BY nama_field1 [ASC|DESC][, nama_field2 [ASC|DESC], ...]]
[GROUP BY nama_field1[, nama_field2, ...]]
[HAVING kondisi_aggregat]
dengan:
§ kondisi adalah syarat yang harus dipenuhi suatu data agar ditampilkan.
§ kondisi_aggregat adalah syarat khusus untuk fungsi aggregat.
2. Sub-query atau Join
Adakalanya sebuah instruksi dapat dituliskan dalam bentuk subquery atau perintah JOIN, disarankan Anda memprioritaskan penggunaan JOIN karena dalam kasus yang umum akan menghasilkan performa yang lebih cepat. Walaupun demikian, mengolah query merupakan suatu seni, selalu ada kemungkinan ternyata subquery bekerja lebih cepat dibandingkan JOIN, misalnya dalam kondisi penggunaan JOIN yang terlalu banyak, ataupun logika query yang belum optimal.
Ada kalanya query dapat menjadi kompleks, terutama jika melibatkan lebih dari satu tabel dan/atau fungsi aggregat. Beberapa SMBD mengizinkan penggunaan subquery. Contoh:
Tampilkan username pengguna yang memiliki jumlah transaksi terbesar.
SELECT username
FROM user
WHERE jml_transaksi =
(
SELECT MAX(jml_transaksi)
FROM user
)
Hasil Riset
Dapat ditarik kesimpulan bahwa :
a. Pada data dengan jumlah record sedikit peng-gunaan cross product dan subset query menunjuk-kan kinerja yang sama
b. Pada data dengan jumlah record banyak, subset query menunjukkan kinerja yang jauh lebih baik dibanding dengan cross product

No comments:

Post a Comment