Basis Data dan SBP
SQL Murni
SQL Murni: Query yang ditulis pada SQL prompt.
SQL adalah non-procedural language.
SQL menentukan WHAT, bukan HOW.
SQL murni bagus untuk:
– Menentukan struktur database
– Menghasilkan low-volume, ad hoc queries
– prototyping
Aplikasi canggih sering diimplementasikan dengan
Embedded SQL
• SQL dapat disisipkan dalam bahasa
pemrograman procedural
• Bahasa ini meliputi C/C++, Java, Perl, Python,
dan PHP.
• Embedded SQL mendukung:
– Aplikasi yang di custom
– Background applications yang berjalan tanpa intervensi user.
Dua Tipe embedding
Low-level embedding (Contoh C/C++):
•SQL dan program dicompile ke dalam sebuah executable tunggal •Link yang sangat efisien.
ODBC - Open Database Connectivity (Contoh PHP/Java):
•SQL query dikirim dari program ke database sebagai sebuah string. •Hasil dikembalikan sebagai sebuah array atau list.
•Kebebasan program dan database:
– Masing-masing bahasa memiliki satu DBI (database interface) untuk semua tipe DBMS. (Cotoh, JDBC untuk Java.)
Low-level embedding (eg. C/C++)
Query terdiri atas gabungan SQL dan
perintah khusus.
Sebuah cursor melangkah melalui hasil
row satu pada satu waktu.
Sebagai contoh:
Cursors
Sebuah pointer untuk current item dalam
sebuah himpunan hasil query.
Dimulai dengan item pertama.
Melangkah melalui hasil satu pada satu
waktu
Beberapa Implementasi kursor
ODBC database connections
• Connect to the database.
• Prepare a query (as a string).
• Execute the query.
• Fetch the results (as an array of rows).
• Finish the query (so that DB can clean up
its buffers).
Contoh: Java
• import the DBI libraries
Class.forName(”oracle.jdbc.OracleDriver”) • connect to the database
Connection con = DriverManager.getConnection
(”jdbc:oracle:Databasename”,”myLogin”,”myPassword”); • Execute a query
ResultSet rs = stmt.executeQuery
(”SELECT empno, surname FROM employee”);
• Cursor points to the first row
Fetching the result (Java)
while (rs.next()) {
int emp = rs.getInt("empno");
String surn = rs.getString("surname"); System.out.println(emp + " " + surn); }
or
while (rs.next()) {
int emp = rs.getInt(1);
String surn = rs.getString(2);
Contoh: PHP
• connect to the database
$link = mysql connect(’hostname’,’uname’, ’passwd’); • Select database
mysql select db(’test’); • Execute a query
$result = mysql query(’select * from test’); • Fetch the result (See next slide)
• Finish the query
mysql free result($result); • Disconnect the database mysql close($link);
Fetching the result (PHP)
echo "<table>";
while ($line = mysql fetch array($result,
MYSQL ASSOC)){
echo "<tr>"; echo "<td>",$line[’frstfeld’],"</
td>";
echo "<td>",$line[’secondfeld’],"</td>";
echo "<td>",$line[’thirdfeld’],"</td>";
echo "</tr>";
}
Pendahuluan
• Komputer tidak hanya mampu menyimpan
data, tetapi juga mampu mengambil atau
mendapatkan kembali data tersebut. Sifat
menyimpan dan mengambil kembali data
yang sudah disimpan tersebut
Pendahuluan
• Data yang tersimpan dalam database
semakin lama akan semakin besar ukuran
atau volumenya.
• Kalau tidak didukung dengan kecepatan
akses yang memadai maka akan semakin
menurun unjuk kerjanya.
• Ukuran unjuk kerja dalam hal ini
Pendahuluan
• Kemampuan mengelola data tersebut biasa
disebuat sebagai suatu database system.
• Untuk mendukung peranan penyimpanan dan
penampilan data tersebut (database system)
komputer membutuhkan softaware yang
mengatur jalannya data (keluar masuknya data)
yang biasa disebut dengan database
Pendahuluan
• Fasilitas dari DBMS adalah dapat mengakses sebuah database tunggal secara bersamaan oleh banyak user, dapat mengakses data secara terbatas hanya untuk user yang berhak dan mengganti kegagalan dari
sistem-sistem tanpa kehilangan keutuhan data.
• Umumnya, interface yang pertama (pokok) untuk sebuah DMBS adalah sebuah high level query atau data
Optimasi Pada Perintah SQL
• Desain aplikasi saja tidak cukup untuk
meningkatkan unjuk kerja harus didukung
dengan optimasi dari perintah SQL yang
digunakan pada aplikasi tersebut.
• Seringkali lokasi fisik data tidak menjadi
perhatian penting saat mendesain
Optimasi Pada Perintah SQL
• Untuk menampilkan hasil query
dibutuhkan pencarian yang melibatkan
struktur fisik penyimpanan data.
• Inti dari optimasi query adalah
Optimasi Pada Perintah SQL
• Kehandalan dari suatu sistem database
atau DBMS dapat diketahui dari cara kerja
optimizer-nya dalam memproses
Optimasi Pada Perintah SQL
• Di dalam optimizer, statement-statement yang
ada diproses dengan salah satu cara dari
banyak cara yang ada untuk mendapatkan
perencanaan query yang paling optimal
sehingga pada akhirnya akan didapatkan
jawaban query dengan waktu akses yang paling
minimum.
• Proses untuk mencari perencanaan eksekusi
query yang terbaik inilah yang disebut dengan
Optimasi Pada Perintah SQL
• Query optimasi merupakan sebuah proses
memilih query plan yang paling efisien dari
banyak startegi pengaksesan query,
Optimasi Pada Perintah SQL
• Index pada database digunakan untuk
meningkatkan kecepatan akses data.
Optimasi Pada Perintah SQL
• Misal digunakan index yang melibatkan
tiga buah kolom yang mengurutkan kolom
menurut kota, propinsi dan kode pos dari
tabel karyawan, sebagai berikut :
CREATE INDEX
idx_kota_prop_kodepos
ON karyawan(kota, propinsi,
kode_pos)
Optimasi Pada Perintah SQL
• Kemudian user melakukan query sebagai
berikut :
SELECT * FROM karyawan WHERE
propinsi=’Jawa Barat’;
• Pada saat melakukan query ini, index tidak akan
digunakan karena kolom pertama (kota) tidak
Optimasi Pada Perintah SQL
• Jika user sering melakukan query ini,
maka kolom index harus diurutkan
menurut propinsi. Selain itu, proses
pencarian data akan lebih cepat jika data
terletak pada block tabel yang berdekatan
daripada harus mencari di beberapa
Optimasi Pada Perintah SQL
• Misal pada perintah SQL berikut ini :
SELECT * FROM karyawan
WHERE id BETWEEN 1010 AND 2010;
• Query ini akan melakukan “scan” terhadap
sedikit data block jika tabel karyawan di atas
diurutkan berdasarkan kolom id. Untuk
mengurutkan berdasarkan kolom yang
berbeda-beda maka tabel disimpan dalam flat file,
Optimasi Pada Perintah SQL
• Alternatif yang lain, bisa digunakan perintah
untuk membuat tabel lain yang memiliki urutan
yang berbeda dari tabel asal, seperti perintah
SQL berikut :
CREATE TABLE karyawan_urut
AS SELECT * FROM karyawan
ORDER BY id;
Faktor Lain Yang Berpengaruh Terhadap
Kecepatan Akses Data
OPTIMASI APLIKASI
– Dalam pembuatan aplikasi, yang perlu
mendapat perhatian adalah apakah akses
terhadap data sudah efisien. Efisien dalam
hal penggunaan obyek yang mendukung
Faktor Lain Yang Berpengaruh Terhadap
Kecepatan Akses Data
• Kadangkala normalisasi sampai level yang
kesekian, tidak menjamin suatu desain
yang efisien. Untuk membuat desain yang
lebih tepat, kadang setelah melakukan
Faktor Lain Yang Berpengaruh Terhadap
Kecepatan Akses Data
CLUSTER DAN INDEX
•Cluster adalah suatu segment yang menyimpan
data dari tabel yang berbeda dalam suatu struktur
fisik disk yang berdekatan. Konfigurasi ini
bermanfaat untuk akses data dari beberapa tabel
yang sering di-query. Penggunaan cluster secara
tepat dilaksanakan setelah menganalisa
Faktor Lain Yang Berpengaruh Terhadap
Kecepatan Akses Data
• Jika aplikasi sering melakukan query dengan
menggunakan suatu kolom yang berada pada
klausa WHERE, maka harus digunakan index
yang melibatkan kolom tersebut. Penggunaan
index yang tepat bergantung pada jenis nilai
yang terdapat dalam kolom yang akan diindex.
Dalam RDBMS Oracle, index B-Tree digunakan
untuk kolom yang mengandung nilai yang cukup
bervariasi, sedangkan untuk nilai yang tidak
Fungsi dari Operasi-operasi Dasar
Aljabar Relasional
1. Select.
– Operasi Select berfungsi untuk menyeleksi tuple-tuple yang memenuhi predikat yang diberikan dari sebuah tabel relasi.dan simbol yang di gunakan
adalah simbol sigma “σ” simbol ini digunakan untuk menunjukkan operasi select.
– Misalkan kita mau mencari hasil NILAI berdasrkan NPM, maka operasi aljabar relasional: σNPM = 10296832(NILAI)
Fungsi dari Operasi-operasi Dasar
Aljabar Relasional
KDMK SKS
KK021 2
KD132 3
Fungsi dari Operasi-operasi Dasar
Aljabar Relasional
3. Union
–
Operasi Union
berfungsi untuk mendapatkan
gabungan nilai atribut dari sebuah tabel relasi
dengan nilai atribut dari tabel relasi lainnya.
dan simbol yang di gunakan adalah simbol “ ”.
∪
– Pada operasi union bernilai benar jika kedua
kondisinya terpenuhi yaitu : Derajat dari 2 tabel
relasi yang dioperasikan harus sama dan
• Misalkan terdapat 2 tabel relasi bernama ASLABSI dan ASLABTI seperti contoh berikut ini :
ASLABSI
ASLABTI
Fungsi dari Operasi-operasi Dasar
Aljabar Relasional
NPM Nama Kelas 10107591 Eko Putra 3KA07 10107971 Keque Irfan 3KA07 18108012 Riza Rulham 3KA07
Fungsi dari Operasi-operasi Dasar
Aljabar Relasional
Eko Putra Keque Irfan M. Ali
Nurdin Riza Rulham Soli
Fungsi dari Operasi-operasi Dasar
Aljabar Relasional
4.
Cartesian Product– Set Difference berfungsi untuk mengkombinasikan informasi yang ada dalam 2 tabel relasi dan
menghasilkan sebuah tabel relasi yang baru. dan simbol yang di gunakan adalah simbol “x“ simbol ini digunakan untuk menunjukkan operasi set difference. – Contoh penggunaan operasi cartesian product :
ASLABTI x MKUL ⟹ tabel relasi baru
– Dari perintah di atas berarti mengkombinasikan
seluruh tupel yang ada pada tabel ASLABTI dengan tabel MKUL. Hasil dari operasi adalah :
Fungsi dari Operasi-operasi Dasar
Aljabar Relasional
• Dari perintah di atas berarti mendapatkan nilai dari
operasi project dengan predikat NPM, KDMK, dan MID dan argumen hasil dari operasi natural join antara tabel MHS dengan tabel NILAI. Hasil dari operasi di atas
adalah :
Fungsi dari Operasi-operasi Dasar
Aljabar Relasional
10296832 KK021 60
10296832 KD132 40
10296126 KD132 70
31296500 KK021 55
41296525 KU122 90
50096487 KD132 80
3. Theta Join
– Operasi theta join berfungsi jika ingin
mengkombinasikan tupel dari 2 tabel relasi
dimana kondisi dari kombinasi tersebut tidak
hanya kesamaan nilai dari 2 atribut bernama
sama, tetapi kondisi yang diinginkan juga bisa
menggunakan operator relasional (≤, <, =, >,
≥). Operasi theta join merupakan ekstensi dari
natural join.
Rule Equivalence
• Dalam mendapatkan query plan yang
Rule Equivalence
• Tujuan
dari optimasi adalah untuk mengurangi
sebanyak mungkin tuple atau baris yang tidak
dibutuhkan.
Rule Equivalence
• Untuk memeriksa apakah query yang
dioptimasi hasilnya sama dengan query
yang biasa, ada beberapa rules
equivalence.
Teknik Optimasi Query Heuristic
• Teknik optimisasi query dapat juga dikatakan sebagai tahapan-tahapan proses yang dilakukan untuk membuat sebuah query tree menjadi lebih optimal.
• Ada bermacam-macam teknik yang digunakan untuk mengoptimasi query, tetapi pada dasarnya ada dua teknik utama yang umumnya digunakan dalam proses optimasi query.
• Dua teknik tersebut adalah Heuristic Optimization dan
Cost Based optimization. Pembahasan secara lebih detail pada pembahasan ini adalah dengan
Teknik Optimasi Query Heuristic
• Heuristic Optimization atau yang biasanya disebut
dengan rule based optimization adalah optimasi query dengan menggunakan aturan-aturan heuristik dan
dijalankan pada logical query plan (rencana query
secara logika) yang terdiri dari urutan operasi-operasi relasional yang biasanya digambarkan sebagai query tree.
Heuristik atau rule-based
•Teknik ini mengaplikasikan aturan heuristik untuk mempercepat proses query. Optimasi jenis ini mentransformasikan query dengan sejumlah aturan yang akan meningkatkan kinerja eksekusi, yakni:
– melakukan operasi selection di awal untuk mereduksi jumlah baris
– melakukan operasi projection di awal untuk mereduksi jumlah atribut
– mengkonversikan query dengan banyak join menjadi query dengan banyak subquery
– melakukan operasi selection dan join yang paling kecil keluarannya sebelum operasi lain
• Berikut ini contoh yang membuktikan bahwa subset query lebih baik dari query dengan banyak join atau
cross product. terdapat 2 buah tabel percobaan,yaitu:
Teknik Optimasi Query Heuristic
Nama Field Tipe NIM Integer
Nama Varchar(30) Alamat Varchar (80)
Nama Field Tipe NIM Integer
a. Query dengan model cross product diwakili oleh query berikut ini:
SELECT M.NIM, M.Nama, M.Alamat FROM Mahasiswa M, Kuliah K
WHERE M.NIM = K.NIM
b. Query dengan model subset query diwakili oleh query berikut ini:
SELECT NIM, Nama, Alamat FROM Mahasiswa
WHERE NIM in ( SELECT NIM FROM Kuliah)
Kedua query tersebut akan menghasilkan informasi yang sama, yaitu menampilkan data NIM, Nama dan Alamat dari tabel Mahasiswa yang NIM-nya terdapat dalam tabel Kuliah.
Nama Field Tipe Keterangan
Jml Integer Jumlah record hasil query
Q1 Integer Waktu yang diperlukan untuk query dengan menggunakan cross product
Q2 Integer Waktu yang diperlukan untuk query dengan menggunakan subset query
Teknik Optimasi Query Heuristic
Jumlah Data 1 10 50 100 1000 10000 25000
Waktu CP (ms) 4 5 9 10 47 425 1162
Teknik Optimasi Query Heuristic
Adapun tujuan dari transformasi tersebut adalah :
•Standarisasi, yaitu mentransformasikan sebuah
query ke dalam sebuah bentuk standar tanpa
optimisasi.
•Simplifikasi, yaitu mengeliminasi kelebihan dalam
sebuah query.
•Ameliorasi, yaitu menyusun ekspresi-ekspresi
yang sudah dihasilkan dengan baik untuk
Notasi untuk Query Tree dan Query
Graph
• Sebuah query tree adalah sebuah struktur data tree
yang sesuai untuk sebuah ekspresi relasi aljabar. Query tree menggambarkan hubungan-hubungan input query sebagai node-node leaf dan tree dan menggambarkan hubungan operasi-operasi aljabar sebagai node-node internal. Sebuah eksekusi dari query tree terdiri dari pelaksanaan sebuah operasi internal node bilamana
operand-operand dari query tree tersedia dan kemudian menggantikan internal node tersebut dengan hubungan yang menghasilkan pelaksanaan operasi. Pelaksanaan akan diakhiri apabila root node dijalankan dan
Notasi untuk Query Tree dan Query
Graph
Notasi untuk Query Tree dan Query
Graph
Notasi untuk Query Tree dan Query
Graph
• Pada gambar di atas (a) relasi-relasi tree PROJECT,
DEPARTMENT, dan EMPLOYEE digambarkan oleh leaf node P, D, dan E, sementara operasi-operasi relasi
aljabar digambarkan oleh internal tree node. Pada saat query tree tersebut dieksekusi, node marked (1) pada gambar (a) harus mulai melakukan eksekusi sebelum node (2) karena beberapa hasil tuple dari operasi (1) harus tersedia sebelum dilakukan operasi eksekusi (2). Dengan cara yang sama, node (2) harus mulai
Notasi untuk Query Tree dan Query
Graph
• Seperti yang dapat dilihat, query tree menggambarkan sebuah perintah khusus dari operasi-operasi untuk mengeksekusi sebuah query. Sebuah gambaran mumi dari sebuah query adalah notasi query graph. Gambar (c) menunjukkan query graph untuk Q2.
Hubungan-hubungan dalam query digambarkan oleh relation node yang ditunjukkan dalam sebuah lingkaran. Nilai konstan khususnya dari kondisi-kondisi pilihan query digambarkan oleh constant nodes yang ditunjukkan oleh lingkaran ganda. Kondisi-kondisi pemilihan dan penggabungan digambarkan oleh graph edges, seperti yang terlihat pada gambar (c). Terakhir, attribute-attribute yang akan
Notasi untuk Query Tree dan Query
Graph
• Gambar query graph tidak menunjukkan sebuah
urutan operasi-operasi yang mula-mula akan
dibentuk. Hanya ada sebuah graph tunggal yang
sesuai untuk tiap query.
• Meskipun beberapa teknik optimasi berdasarkan
pada query graph, tapi pada kenyataannya query
tree adalah lebih baik karena dalam
Heuristic Optimization Query Tree
• Query parser khusus akan menghasilkan sebuah inisial query tree yang standar untuk mencocokkannya pada sebuah SQL query, tanpa melakukan beberapa
optimasi. Sebagai contoh, untuk sebuah select-project-join query seperti Q2, yang inisial tree-nya ditunjukkan pada gambar (b), CARTESIAN PRODUCT dari relasi-relasi ditentukan dalam klausa FROM yang terlebih dahulu digunakan dan kemudian kondisi-kondisi
selection dan join dari klausa WHERE yang digunakan, diikuti oleh proyeksi pada attribute-attribute klausa
Heuristic Optimization Query Tree
• Sebagai sebuah canonical query tree yang
menggambarkan sebuah ekspresi relasi aljabar adalah sangat tidak efisien apabila menjalankannya secara langsung, karena operasi-operasi CARTESIAN
PRODUCT (X).
Heuristic Optimization Query Tree
Diberikan contoh dari transformasi sebuah query Q yang bunyinya sbb:
"Find the last names of employees born after 1957 who work on a project named 'Aquarius'."
Query di atas dapat dispesifikasikan ke dalam SQL seperti berikut ini:
Q: SELECT LNAME
FROM EMPLOYEE, WORKS_ON, PROJECT
WHERE PNAME = 'Aquarius' AND PNUMBER = PNO AND ESSN=SSN AND
Heuristic Optimization Query Tree
• Inisial query tree untuk Q akan ditunjukkan pada gambar (a). Menjalankan tree ini secara langsung mula-mula
membentuk sebuah file yang sangat besar yang berisi
Heuristic Optimization Query Tree
Heuristic Optimization Query Tree
Heuristic Optimization Query Tree
• Selanjutnya perbaikan dicapai dengan menukar posisi-posisi dari relasi-relasi EMPLOYEE dan PROJECT
dalam tree, seperti yang ditunjukkan pada gambar (c) yang menggunakan informasi bahwa PNUMBER adalah key attribute dari relasi proyek dan oleh sebab itu
operasi SELECT pada relasi PROJECT akan
mendapatkan kembali hanya sebuah record tunggal. Selanjutnya query tree dapat diperbaiki dengan cara mengembalikan beberapa operasi CARTESIAN
PRODUCT yang diikuti dengan sebuah kondisi join
Heuristic Optimization Query Tree
Heuristic Optimization Query Tree
Heuristic Optimization Query Tree
Heuristic Optimization Query Tree
• Seperti contoh di atas, sebuah query tree
dapat dintransformasikan selangkah demi
selangkah ke dalam query tree yang
lainnya yang lebih efisien untuk
dieksekusi. Bagaimanapun juga harus
dipastikan terlebih dahulu bahwa
langkah-langkah transformasi selalu berperan
Heuristic Optimization Query Tree
• Untuk melakukan
transformasi-transformasi query tersebut, query
optimizer harus mengetahui aturan-aturan
transformasi mana yang mempertahankan
persamaan ini. Dan aturan-aturan
Heuristic Optimization Query Tree
Diberikan sebuah SQL :
SELECT PNUMBER, DNUM, LNAME
FROM PROJECT, DEPARTMENT, EMPLOYEE
WHERE DNUM = DNUMBER AND
MGRSSN = SSN AND
PLOCATION = “Stafford”
Heuristic Optimization Query Tree
Heuristic Optimization Query Tree
Heuristic Optimization Query Tree
Heuristic Optimization Query Tree