Uploaded by fitrah12

pertemuan5

advertisement
Basis Data dan SBP
Disusun Oleh : Lily Wulandari
Database Query
Language
SQL dan Bahasa
Pemrograman
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 menggunakan SQL yang
dikombinasikan dengan bahasa pemrograman.
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.
– Kombinasi database tools dengan programming tools.
– Databases pada WWW.
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.)
– database driver (DBD) yang terpisah untuk masing-masing tipe
DBMS .
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:
EXEC SQL SELECT empname INTO :ename
FROM employee WHERE eno = :eno;
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
memungkinkan untuk mundur juga.
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).
• Disconnect from the database.
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
rs.next()
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);
System.out.println(emp + " " + surn);}
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);
mysql commands might throw errors, which should be caught: ... or
die(’Error message ’ . mysql error());
Fetching the result (PHP)
echo "<table>";
while ($line = mysql fetch array($result, MYSQL
ASSOC)){
echo "<tr>"; echo "<td>",$line[’firstfield’],"</td>";
echo "<td>",$line[’secondfield’],"</td>";
echo "<td>",$line[’thirdfield’],"</td>";
echo "</tr>";
}
echo "</table>";
Optimasi Query
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
membutuhkan pengelolaan yang baik,
sehingga didapatkan suatu kemampuan
menyimpan dan mendapatkan kembali
secara efektif dan efisien.
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
kecepatan akses data dipengaruhi oleh
banyak faktor.
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
management system (DBMS).
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 sistemsistem tanpa kehilangan keutuhan data.
• Umumnya, interface yang pertama (pokok) untuk sebuah
DMBS adalah sebuah high level query atau data
manipulation language yang dapat dengan mudah
digunakan. Contoh dari high level query adalah SQL
(Structure Query Language).
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
database. Karena hanya desain logik saja
yang diperhatikan.
Optimasi Pada Perintah SQL
• 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 Pada Perintah SQL
• Kehandalan dari suatu sistem database
atau DBMS dapat diketahui dari cara kerja
optimizer-nya dalam memproses
statement-statement SQL yang dibuat oleh
user maupun program-program
aplikasinya.
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
proses optimasi query.
Optimasi Pada Perintah SQL
• Query optimasi merupakan sebuah proses
memilih query plan yang paling efisien dari
banyak startegi pengaksesan query,
khususnya untuk query yang kompleks.
Optimasi Pada Perintah SQL
• Index pada database digunakan untuk
meningkatkan kecepatan akses data.
Pada saat query dijalankan, index mencari
data dan menentukan nilai ROWID yang
membantu menemukan lokasi data secara
fisik di disk. Akan tetapi penggunaan index
yang tidak tepat, tidak akan meningkatkan
unjuk kerja dalam hal ini 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)
TABLESPACE INDX;
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
digunakan dalam klausa WHERE.
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
datafile yang terletak pada block yang
berbeda.
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 berbedabeda maka tabel disimpan dalam flat file,
kemudian tabel diekspor dan diurutkan sesuai
kebutuhan.
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;
• Pada SQL di atas, tabel karyawan_urut berisi
data yang sama dengan tabel karyawan hanya
datanya terurut berdasarkan kolom 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
kecepatan akses, seperti index atau cluster.
Kemudian juga bagaimana cara database
didesain. Apakah desain database sudah
melakukan normalisasi data secara tepat.
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
normalisasi perlu dilakukan denormalisasi.
Misalnya tabel yang hubungannya one-toone dan sering diakses bersama lebih baik
disatukan dalam satu tabel.
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 tabeltabel mana saja yang sering di-query secara
bersamaan menggunaan perintah SQL join.
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
memiliki variasi cukup banyak, lebih baik
menggunakan index bitmap.
Fungsi dari Operasi-operasi Dasar
Aljabar Relasional
1. Select.
– Operasi Select berfungsi untuk menyeleksi tupletuple 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)
NPM
KDMK
Nilai1
Nilai2
10296832
KK021
60
75
10296832
KD132
40
30
Fungsi dari Operasi-operasi Dasar
Aljabar Relasional
KDMK
SKS
KK021
2
KD132
3
KU122
2
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 domain dari atribut yang dioperasikan
juga harus sama.
Fungsi dari Operasi-operasi Dasar
Aljabar Relasional
• Misalkan terdapat 2 tabel relasi bernama ASLABSI dan
ASLABTI seperti contoh berikut ini :
ASLABSI
NPM
10107591
10107971
18108012
Nama
Eko Putra
Keque Irfan
Riza Rulham
Kelas
3KA07
3KA07
3KA07
ASLABTI
NPM
11107891
18108012
11107611
Nama
Kelas
M. Ali Nurdin 3KA07
Riza Rulham 3KA07
Soli Kurniawan 3KA07
Fungsi dari Operasi-operasi Dasar
Aljabar Relasional
Eko Putra
Keque Irfan
M. Ali
Nurdin
Riza
Rulham
Soli
Kurniawan
Fungsi dari Operasi-operasi Dasar
Aljabar Relasional
Eko Putra
Keque Irfan
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
11107891
11107891
11107891
18108012
18108012
18108012
11107611
11107611
11107611
M. Ali Nurdin 3KA07
M. Ali Nurdin 3KA07
M. Ali Nurdin 3KA07
Riza Rulham 3KA07
Riza Rulham 3KA07
Riza Rulham 3KA07
Soli Kurniawan 3KA07
Soli Kurniawan 3KA07
Soli Kurniawan 3KA07
KK021
KD132
KU122
KK021
KD132
KU122
KK021
KD132
KU122
P. Basis Data
SIM
Pancasila
P. Basis Data
SIM
Pancasila
P. Basis Data
SIM
Pancasila
2
3
2
2
3
2
2
3
2
Fungsi dari Operasi-operasi Dasar
Aljabar Relasional
Fungsi dari Operasi-operasi Dasar
Aljabar Relasional
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 :
10296832
10296832
10296126
31296500
41296525
50096487
21196353
KK021
KD132
KD132
KK021
KU122
KD132
KU122
60
40
70
55
90
80
75
Fungsi dari Operasi-operasi Dasar
Aljabar Relasional
Fungsi dari Operasi-operasi Dasar
Aljabar Relasional
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
efisien pemeriksaan dilakukan mulai dari
pemeriksaaan akses path yang mungin
(primary index akses, secondary indeks
akses, dan full file scan), dan juga variasi
teknik join tabel relasional.
Rule Equivalence
• Tujuan dari optimasi adalah untuk mengurangi
sebanyak mungkin tuple atau baris yang tidak
dibutuhkan.
• Jika kita sudah memiliki query, maka kita bisa
mengoptimasi query dengan cara mentransform
query tersebut.
Rule Equivalence
• Untuk memeriksa apakah query yang
dioptimasi hasilnya sama dengan query
yang biasa, ada beberapa rules
equivalence.
• Rule equivalence ini juga bisa sebagai
langkah awal untuk mentransform query
sehingga lebih efisien.
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
menggunakan teknik heuristic optimization.
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.
• Query Optimizer mendapatkan sebuah inisial plan dari
parser dan menggunakan aturan-aturan heuristik untuk
mentransformasikan sebuah query ke dalam sebuah
bentuk yang sama sehingga dapat diproses dengan
lebih efisien.
Teknik Optimasi Query Heuristic
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
Teknik Optimasi Query Heuristic
• Berikut ini contoh yang membuktikan bahwa subset
query lebih baik dari query dengan banyak join atau
cross product. terdapat 2 buah tabel percobaan,yaitu:
Nama Field
NIM
Nama
Alamat
Tipe
Integer
Varchar(30)
Varchar (80)
Nama Field
NIM
MataKuliah
Tipe
Integer
Varchar(30)
Teknik Optimasi Query Heuristic
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.
Teknik Optimasi Query Heuristic
Nama Field Tipe
Jml
Integer
Keterangan
Jumlah record hasil query
Q1
Integer
Q2
Integer
Waktu yang diperlukan untuk query
dengan menggunakan cross product
Waktu yang diperlukan untuk query
dengan menggunakan subset query
Jumlah Data
Waktu CP (ms)
Waktu SQ (ms)
1 10
4 5
5 5
50
9
22
100
10
45
1000
47
42
10000
425
56
25000
1162
121
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
mengevaluasi bentuk.
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
menghasilkan hasil relasi untuk query.
Notasi untuk Query Tree dan Query
Graph
Notasi untuk Query Tree dan Query
Graph
Notasi untuk Query Tree dan Query
Graph
b) Inisial ( Canonical) query tree untuk SQL query Q2
Notasi untuk Query Tree dan Query
Graph
c) Query graph untuk Q2
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
dieksekusi dan menghasilkan hasil sebelum node (3)
dapat mulai dieksekusi, dan begitu seterusnya.
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
didapatkan kembali dari tiap relasi ditunjukkan dalam bentuk kurung
siku di atas tiap relasi.
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
penggunaannya, query optimizer perlu untuk
menunjukkan perintah-perintah untuk eksekusi
query yang tidak mungkin dilakukan dalam
query graph.
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 SELECT.
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).
• Sebagai contoh, apabila relasi-relasi seperti PROJECT,
DEPARTEMENT dan EMPLOYEE mempunyai ukuran
record 100 byte, 50 byte, dan 150 byte dan mengandung
100 tuple, 20 tuple, dan 5000 tuple, berturut-turut, maka
hasil dari CARTESIAN PRODUCT akan mengandung 10
juta tuple dari masing-masing ukuran record 300 byte..
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
BDATE > '31-12-1957';
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
CARTESIAN PRODUCT dari keseluruhan file-file
EMPLOYEE, WORKS_ON, dan PROJECT. Namun
query ini hanya memerlukan satu record dari relasi
PROJECT untuk proyek 'Aquarius' dan hanya record
EMPLOYEE untuk yang tanggal lahimya setelah '31-121957'. Gambar (b) akan menunjukkan perbaikan query
tree yang mula-mula menggunakan operasi-operasi
SELECT untuk mengurangi banyaknya tuple yang
tampak dalam CARTESIAN PRODUCT.
Heuristic Optimization Query Tree
a) Inisial query tree untuk SQL query
Heuristic Optimization Query Tree
b) Memindahkan operasi-operasi SELECT ke dalam
query tree
Heuristic Optimization Query Tree
• Selanjutnya perbaikan dicapai dengan menukar posisiposisi 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
dengan sebuah operasi JOIN seperti yang ditunjukkan
pada gambar (d).
Heuristic Optimization Query Tree
c) Membatasi penggunaan operasi SELECT terlebih
dahulu
Heuristic Optimization Query Tree
d) Menggantikan CARTESIAN PRODUCT dan SELECT
dengan operasi –operasi JOIN
Heuristic Optimization Query Tree
Heuristic Optimization Query Tree
e) Memindahkan Operasi Project ke bawah 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 langkahlangkah transformasi selalu berperan
penting untuk sebuah query tree yang
sama.
Heuristic Optimization Query Tree
• Untuk melakukan transformasitransformasi query tersebut, query
optimizer harus mengetahui aturan-aturan
transformasi mana yang mempertahankan
persamaan ini. Dan aturan-aturan
transformasi tersebut telah diuraikan di
atas.
Heuristic Optimization Query Tree
Diberikan sebuah SQL :
SELECT PNUMBER, DNUM, LNAME
FROM PROJECT, DEPARTMENT, EMPLOYEE
WHERE DNUM = DNUMBER AND
MGRSSN = SSN AND
PLOCATION = “Stafford”
Maka Proses Optimisasi dengan Menggunakan
Aturan Heuristik sbb :
Heuristic Optimization Query Tree
a) Inisial(canonical) Query Tree
Heuristic Optimization Query Tree
b) Menggunakan langkah 1 untuk memisahkan
SELECT
Heuristic Optimization Query Tree
c) Merubah operasi SELECT dengan Cross
Product
Heuristic Optimization Query Tree
d) Mengkombinasikan Cross Product dan
SELECT ke dalam bentuk JOIN
Download