Friday 29 November 2019

TUGAS - Sistem Basis Data(1)

Alexander
Optimisasi Query
        Optimisasi Query adalah suatu proses untuk menganalisa query untuk menentukansumber-sumber apa saja yang digunakan oleh query tersebut dan apakah penggunaan dari sumber tersebut dapat dikurangi tanpa merubah output. Atau bisa juga dikatakan bahwa optimisasi query adalah sebuah prosedur untuk meningkatkan strategi evaluasi dari suatu query untuk membuat evaluasi tersebut menjadi lebih efektif. Optimisasi query mencakup beberapa teknik seperti transformasi query ke dalam bentuk logika yang sama, memilih jalan akses yang optimal dan mengoptimumkan penyimpanan data. 
        Optimisasi query merupakan bagian dasar dari sebuah sistem database dan juga merupakan suatu proses untuk menghasilkan rencana akses yang efisien dari sebuah query di dalam sebuah database. Secara tidak langsung, sebuah rencana akses merupakan sebuah strategi yang nantinya akan dijalankan untuk sebuah query, untuk mendapatkan kembali operasi-operasi yang apabila dijalankan akan menghasilkan database record query. Ada tiga aspek dasar yang ditetapkan dan mempengaruhi optimisasi query, yaitu : search space, cost modeldan search strategy. 
       Search space adalah sekumpulan rencana-rencana akses yang sama secara logika yang dapat digunakan untuk mengevaluasi sebuah query. Semua rencana-rencana dalam search space query mengembalikan hasil yang sama biarpun beberapa rencana lebih efisien dibandingkan dengan rencana yang lainnya.  
       Cost model menandakan sebuah harga untuk tiap rencana dalam search space. Harga dari rencana tersebut adalah sebuah perkiraan dari sumber-sumber yang digunakan pada saat rencana dijalankan, dimana harga yang lebih rendah, merupakan yang terbaik dari rencana-rencana yang ada.
      Search strategyadalah sebuah perincian dari rencana-rencana mana dalamsearch space yang akan diperiksa. Apabila search space-nya kecil, maka strategi yang dapat diteruskan adalah menghitung dan mengevaluasi setiap rencana. Meskipun kebanyakan search space bahkan untuk query-query yang sederhana adalah sangat besar, akan tetapi query optimizer selalu memerlukan aturan heuristik untuk mengontrol nomer dari rencana-rencana yang akan diperiksa


Tujuan Optimisasi Query
       Prinsip ekonomi yang diperlukan untuk sebuah query adalah mengoptimisasi prosedur-prosedur, mencoba untuk memaksimumkan output dari sejumlah sumber-sumber yang diberikan ataupun untuk meminimumkan penggunaan sumber untuk memberikan output.  
       Tujuan dari optimisasi query adalah berbeda-beda untuk setiap sistem. Ada yang menggunakan optimisasi query untuk meminimumkan waktu proses sedangkan pada situasi lain bisa juga optimisasi query diperlukan untuk waktu respon, meminimumkan I/O dan meminimumkan penggunaan memory. Tetapi pada dasarnya, tujuan dari optimisasi query adalah menemukan jalan akses yang termurah untuk meminimumkan total waktu pada saat proses sebuah query. Untuk mencapai tujuan tersebut, maka diperlukan optimizeruntuk melakukan analisa query dan untuk melakukan pencarian jalan akses.

Query dapat dilakukandengan mengoptimalkan ekspresi Aljabar Relasional seperti :

  • Selection (σ)
  • Projection (̟)
  • Cartesian Product / Cross Product (X)
  • Union (∪)
  • Set-Difference (-)


    Berikut tabel yang akan dibuat aljabar relasional dan optimasi querynya

    Tabel Pelanggan   
                                                 Tabel Harga                    
                           
    Tabel Daya Terpasang


    ALJABAR RELASIONAL

    SELECT nmpel
    FROM pelanggan,daya_terpasang
    WHERE pelanggan.idpel = daya_terpasang.idpel
    AND daya > 1300

    Π nmpel(σdaya >1300 Λ pelanggan.idpel=daya_terpasang.idpel(pelanggan X daya_terpasang))
    Query Decomposition
  • Pada Lapis Pertama ini input adalah query dirubah menjadi Aljabar query.
  • Query Decomposition dibagi menjadi 4 bagian :
    • Normalisasi
      Proses untuk mengubah suatu tabel yang memiliki  masalah tertentu  ke dalam dua buah tabel    atau lebih, yang tidak lagi memiliki masalah tersebut (Abdul Kadir, 2002: 52).
    • Analisa semantikMendeteksi queri yang salah
    • Memperbaiki Query
    • Menata ulang struktur dari query (restruktured)
      Gunakan aturan transformasi

     Aturan untuk operasi logika
    p1 ∧ p2 <=> p2 ^ p1
    p1 V p2 <=> p2 V p1
    p1 ^ ( p2 ^p3) (p1 ^ p2) ^p3
    p1 V (p2 Vp3) ( p1 V p2) Vp3
    p1 ^ (p2 Vp3) (p1 ^ p2) V (p1 ^ p3)
    p1 V (p2 ^ p3) (p1 V p2) ^ (p1 V p3)
    ¬ ( p1 ^ p2) ¬p1 V ¬p2
    ¬ ( p1 V p2) ¬p1 ^ ¬p2
    ¬(¬p) p


    CONTOH 1
    Mencari nama pelanggan dengan ap ‘lenteng agung ‘
    dengan daya 1300 atau 900 watt

    SQL :
    Select nmpel
    From pelanggan p , daya_terpasang d
    Where p.idpel = d.idpel
    And ap = “lenteng agung”
    And (daya = 1300 Or daya = 900)

    Normalisasi:

    p.idpel = d.idpel ∧ ap=“lenteng agung” ∧ (daya = 1300 V Daya =900)

    ANALISA
    Menemukan queri yang salah
    Tipe yang tidak benar:
    1. Jika ada atribut atau nama relasi tidak didefenisi dalam skema global
    2. Ada operasi yang diaplikasikan ke atribut dengan tipe yang salah
     
    KESALAHAN SEMANTIK
    1. Ada komponen yang tidak memberikan konstribusi dalam hasil akhir
    2. Hanya sebagian dari relational queris yang dapat di tes untuk koreksi
    3. Untuk mendektesi : query graph dan Join Graph

                                   



SQL TUNING

Definisi

Memperlancar SQL adalah sebagai banyak bagian dari kinerja aplikasi sebagai database merancang dan tuning. Tidak peduli bagaimana menyempurnakan database atau bagaimana suara struktur database, Anda tidak akan menerima hasil query tepat waktu yang diterima kepada Anda, atau bahkan lebih buruk lagi, pelanggan, jika Anda tidak mengikuti beberapa pedoman dasar.Mempercayai kami, jika pelanggan tidak puas, maka Anda bisa bertaruh atasan Anda tidak akan puas baik.

Tujuan

Anda sudah tahu tentang komponen utama dari bahasa database relasional dari SQL dan bagaimana berkomunikasi dengan database, sekarang saatnya untuk menerapkan pengetahuan Anda untuk hidup kinerja keprihatinan-nyata. Tujuan Hari 15 adalah untuk merekomendasikan metode untuk memperbaiki kinerja, atau pelurusan, pernyataan SQL. Pada akhir hari ini, Anda harus
  • Memahami konsep perampingan kode SQL Anda
  • Memahami perbedaan antara beban batch dan pengolahan transaksi dan pengaruhnya terhadap kinerja database
  • Mampu untuk memanipulasi kondisi dalam query Anda untuk mempercepat pengambilan data
  • database Jadilah akrab dengan dasar beberapa elemen yang mempengaruhi seluruh tuning
Berikut analogi untuk membantu Anda memahami frase merampingkan pernyataan SQL: Tujuan dari perenang kompetitif adalah untuk menyelesaikan peristiwa dalam waktu sedikit mungkin tanpa didiskualifikasi. Para perenang harus memiliki teknik yang dapat diterima, dapat torpedo diri mereka sendiri melalui air, dan penggunaan semua sumber daya fisik mereka seefektif mungkin.Dengan setiap stroke dan napas mereka mengambil, perenang kompetitif tetap efisien dan bergerak melalui air dengan sedikit hambatan yang sangat.
Lihatlah query SQL Anda dengan cara yang sama. Anda harus selalu tahu persis apa yang ingin Anda capai dan kemudian berusaha untuk mengikuti jalan sedikit perlawanan. Semakin banyak waktu yang Anda habiskan untuk merencanakan, semakin sedikit waktu Anda harus menghabiskan merevisi nanti. Tujuan Anda harus selalu untuk mengambil data yang akurat dan untuk melakukannya dalam waktu sesedikit mungkin. Seorang pengguna akhir menunggu di lambat permintaan seperti restoran lapar tak sabar menunggu makan lambat. Meskipun Anda dapat menulis permintaan yang paling dalam beberapa cara, susunan komponen dalam permintaan adalah faktor yang membuat perbedaan detik, menit, dan kadang-kadang jam saat Anda mengeksekusi querySQL. Memperlancar adalah proses menemukan pengaturan optimal unsur-unsur dalam permintaan Anda.
Selain perampingan pernyataan SQL Anda, Anda juga harus mempertimbangkan beberapa faktor lain ketika mencoba untuk meningkatkan kinerja database umum, misalnya, transaksi pengguna konkuren yang terjadi dalam database, tabel pengindeksan, dan turun database tuning-dalam.

SQL Tuning Teknik Optimasi / SQL:

1) Query sql menjadi lebih cepat jika Anda menggunakan nama-nama kolom yang sebenarnya dalam pernyataan SELECT bukan dari '*'.

Untuk Contoh: Menulis query sebagai
SELECT id, first_name, last_name, age, subject FROM student_details;
Dari pada:
SELECT * FROM student_details; 


2) Klausa HAVING digunakan untuk menyaring baris setelah semua baris yang dipilih. Hal ini seperti filter. Jangan gunakan klausa HAVING untuk tujuan lain. Untuk Contoh: Menulis query sebagai
SELECT subject, count(subject)
FROM student_details
WHERE subject != 'Science'
AND subject != 'Maths'
GROUP BY subject;
Dari pada:

SELECT subject, count(subject)
FROM student_details
GROUP BY subject
HAVING subject!= 'Vancouver' AND subject!= 'Toronto'; 


3) Kadang-kadang Anda mungkin memiliki lebih dari satu subqueries dalam query utama Anda. Cobalah untuk meminimalkan jumlah blok subquery dalam permintaan Anda. Untuk Contoh: Menulis query sebagai
SELECT name
FROM employee
WHERE (salary, age ) = (SELECT MAX (salary), MAX (age)
FROM employee_details)
AND dept = 'Electronics';
Dari pada:
SELECT name
FROM employee
WHERE salary = (SELECT MAX(salary) FROM employee_details)
AND age = (SELECT MAX(age) FROM employee_details)
AND emp_dept = 'Electronics'; 


4) Gunakan Operator EXISTS, IN dan meja bergabung tepat dalam permintaan Anda. a) Biasanya IN memiliki kinerja paling lambat. b) IN efisien ketika sebagian besar kriteria filter adalah di sub-query. c) ADA efisien ketika sebagian besar kriteria filter dalam query utama.
Untuk Contoh: Menulis query sebagai
Select * from product p
where EXISTS (select * from order_items o
where o.product_id = p.product_id)
Dari pada:
Select * from product p
where product_id IN
(select product_id from order_items 


5) Gunakan ADA bukannya DISTINCT saat menggunakan bergabung yang melibatkan tabel memiliki satu-ke-banyak hubungan. Untuk Contoh: Menulis query sebagai
SELECT d.dept_id, d.dept
FROM dept d
WHERE EXISTS ( SELECT 'X' FROM employee e WHERE e.dept = d.dept);
Dari pada:
SELECT DISTINCT d.dept_id, d.dept
FROM dept d,employee e
WHERE e.dept = e.dept; 


6) Cobalah untuk menggunakan UNION ALL di tempat UNION. Untuk Contoh: Menulis query sebagai
SELECT id, first_name
FROM student_details_class10
UNION ALL
SELECT id, first_name
FROM sports_team;
Dari pada:
SELECT id, first_name, subject
FROM student_details_class10
UNION
SELECT id, first_name
FROM sports_team; 


7) Hati-hati saat menggunakan kondisi di klausa WHERE. Untuk Contoh: Menulis query sebagai
SELECT id, first_name, age FROM student_details WHERE age > 10;
Dari pada:
SELECT id, first_name, age FROM student_details WHERE age != 10;
Menulis query sebagai
SELECT id, first_name, age
FROM student_details
WHERE first_name LIKE 'Chan%';
Dari pada:
SELECT id, first_name, age
FROM student_details
WHERE SUBSTR(first_name,1,3) = 'Cha';
Menulis query sebagai
SELECT id, first_name, age
FROM student_details
WHERE first_name LIKE NVL ( :name, '%');
Dari pada:
SELECT id, first_name, age
FROM student_details
WHERE first_name = NVL ( :name, first_name);
Menulis query sebagai
SELECT product_id, product_name
FROM product
WHERE unit_price BETWEEN MAX(unit_price) and MIN(unit_price)
Dari pada:
SELECT product_id, product_name
FROM product
WHERE unit_price >= MAX(unit_price)
and unit_price <= MIN(unit_price)
Menulis query sebagai
SELECT id, name, salary
FROM employee
WHERE dept = 'Electronics'
AND location = 'Bangalore';
Dari pada:
SELECT id, name, salary
FROM employee
WHERE dept || location= 'ElectronicsBangalore';
Gunakan ekspresi non-kolom pada satu sisi permintaan karena akan diproses sebelumnya.
Menulis query sebagai
SELECT id, name, salary
FROM employee
WHERE salary < 25000;
Dari pada:
SELECT id, name, salary
FROM employee
WHERE salary + 10000 < 35000;
Menulis query sebagai
SELECT id, first_name, age
FROM student_details
WHERE age > 10;
Dari pada:
SELECT id, first_name, age
FROM student_details
WHERE age NOT = 10; 


8) Gunakan deCODE untuk menghindari pemindaian baris yang sama atau bergabung dengan meja yang sama berulang-ulang. DECODE juga dapat dibuat digunakan di tempat GROUP BY atau ORDER BY klausa. Untuk Contoh: Menulis query sebagai
SELECT id FROM employee
WHERE name LIKE 'Ramesh%'
and location = 'Bangalore';
Dari pada:
SELECT DECODE(location,'Bangalore',id,NULL) id FROM employee
WHERE name LIKE 'Ramesh%'; 


9) Untuk menyimpan benda biner besar, pertama menempatkan mereka dalam sistem file dan menambahkan path file dalam database.


10) Untuk menulis pertanyaan yang memberikan kinerja yang efisien mengikuti aturan standar SQL umum.
a) Gunakan kasus tunggal untuk semua kata kerja SQL b) Mulailah semua kata kerja SQL pada baris baru c) Memisahkan semua kata dengan spasi tunggal d) Kanan atau kiri verba menyelaraskan dalam SQL verba awal