Optimisasi Query
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
- Normalisasi
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;
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';
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)
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);
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;
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;
SELECT id, first_name, age FROM student_details WHERE age != 10;
SELECT id, first_name, age
FROM student_details
WHERE first_name LIKE 'Chan%';
SELECT id, first_name, age
FROM student_details
WHERE SUBSTR(first_name,1,3) = 'Cha';
SELECT id, first_name, age
FROM student_details
WHERE first_name LIKE NVL ( :name, '%');
SELECT id, first_name, age
FROM student_details
WHERE first_name = NVL ( :name, first_name);
SELECT product_id, product_name
FROM product
WHERE unit_price BETWEEN MAX(unit_price) and MIN(unit_price)
SELECT product_id, product_name
FROM product
WHERE unit_price >= MAX(unit_price)
and unit_price <= MIN(unit_price)
SELECT id, name, salary
FROM employee
WHERE dept = 'Electronics'
AND location = 'Bangalore';
SELECT id, name, salary
FROM employee
WHERE dept || location= 'ElectronicsBangalore';
Menulis query sebagai
SELECT id, name, salary
FROM employee
WHERE salary < 25000;
SELECT id, name, salary
FROM employee
WHERE salary + 10000 < 35000;
SELECT id, first_name, age
FROM student_details
WHERE age > 10;
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';
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
0 comments:
Post a Comment
Please comment my blog !!!