TUNING SQL
Pada Penulisan berikut saya akan mencoba sedikit menjelaskan apa yang saya ketahui tentang tuning SQL.
Sql digunakan untuk mengambil data dari database. Kita bisa mendapatkan hasil yang sama dengan menulis query sql yang berbeda. Tapi penggunaan query terbaik adalah penting ketika kinerja dianggap. Jadi, Anda perlu untuk tuning query sql berdasarkan kebutuhan. Berikut
adalah daftar query yang kita gunakan seperti biasa, dan berikut saya
jelaskan tentang bagaimana query sql dapat dioptimalkan untuk kinerja
yang lebih baik.
SQL Tuning / SQL Optimasi Teknik:
1) Permintaan sql menjadi lebih cepat jika Anda menggunakan
kolom nama sebenarnya dalam pernyataan SELECT bukan dari '*'.
Untuk Contoh:
Menulis query sebagai
SELECT id,
first_name, last_name, usia, subjek FROM student_details;
Sebagai gantinya:
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
subjek, count (subjek) FROM student_details
WHERE subjek = 'Ilmu'! AND subjek = 'Matematika'!
GROUP BY subjek ;
Sebagai gantinya:
SELECT
subjek, count (subjek) FROM student_details
GROUP BY subjek
HAVING subjek = 'Vancouver' AND subjek = '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
nama FROM karyawan
WHERE (gaji, usia) = (SELECT MAX (gaji), MAX (umur)
FROM employee_details)
AND dept = 'Elektronik';
Sebagai gantinya:
SELECT
nama FROM karyawan
WHERE gaji = (SELECT MAX (gaji) FROM employee_details)
AND usia = (SELECT MAX (umur) FROM employee_details)
AND emp_dept = 'Elektronik';
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 dalam sub-query.
c) EXISTS
adalah 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)
Sebagai gantinya:
Select * from product p
where
product_id IN
(select
product_id from order_items
5) Penggunaan EXISTS bukan DISTINCT ketika 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);
Sebagai gantinya:
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;
Sebagai gantinya:
SELECT id, first_name, subject
FROM
student_details_class10
UNION
SELECT
id, first_name
FROM
sports_team;
7) Berhati-hatilah saat menggunakan kondisi di klausa WHERE.
Untuk Contoh:
Menulis query sebagai
SELECT id, first_name, age FROM
student_details WHERE age > 10;
Sebagai gantinya:
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%';
Sebagai gantinya:
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, '%');
Sebagai gantinya:
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)
Sebagai gantinya:
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';
Sebagai gantinya:
SELECT id, name, salary
FROM
employee
WHERE
dept || location= 'ElectronicsBangalore';
Gunakan non-kolom ekspresi pada satu sisi permintaan karena akan
diproses sebelumnya.
Menulis query sebagai
SELECT id, name, salary
FROM
employee
WHERE
salary < 25000;
Sebagai gantinya:
SELECT id, name, salary
FROM
employee
WHERE
salary + 10000 < 35000;
Menulis query sebagai
SELECT id, first_name, age
FROM
student_details
WHERE
age > 10;
Sebagai gantinya:
SELECT id, first_name, age
FROM
student_details
WHERE
age NOT = 10;
8) Gunakan DECODE untuk menghindari pemindaian baris yang
sama atau bergabung dengan tabel yang sama berulang-ulang. DECODE juga bisa
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';
Sebagai gantinya:
SELECT DECODE(location,'Bangalore',id,NULL)
id FROM employee
WHERE
name LIKE 'Ramesh%';
9) Untuk menyimpan benda-benda besar biner, pertama
menempatkan mereka dalam sistem file dan menambahkan path file dalam database.
10) Untuk menulis query yang memberikan kinerja yang efisien
mengikuti aturan umum SQL standar.
a) Gunakan kasus tunggal untuk semua verba SQL
b) Mulailah semua verba SQL pada baris baru
c) Pisahkan semua kata dengan spasi tunggal
d) kanan atau kiri menyelaraskan kata kerja dalam kerja SQL
awal
Demikianlah yang dapat saya berikan dalam penulisan kali ini, semoga ilmu yang sedikit saya punyai ini dapat berguna bagi yang memerlukannya.
Terimakasih
wassalamualaikum wr wb