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