1) Permintaan sql menjadi lebih cepat jika menggunakan kolom nama sebenarnya dalam pernyataan SELECT bukan dari '*'.
Untuk Contoh:
Menulis query sebagai
SELECT id, first_name, last_name, age,
subject FROM student_details;
Daripada:
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;
Daripada:
SELECT subject, count(subject)
FROM student_details
GROUP BY subject
HAVING subject!= 'Vancouver' AND subject!= 'Toronto';
3) Kadang-kadang
kita mungkin memiliki lebih dari satu subqueries dalam query utama. Kita harus
mencoba untuk meminimalkan jumlah blok subquery dalam permintaan kita.
Untuk Contoh: Menulis
query sebagai
SELECT name
FROM employee
WHERE (salary, age ) = (SELECT MAX (salary), MAX (age)
FROM employee_details)
AND dept = 'Electronics';
Daripada:
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) Operator
gunakan EXISTS dan IN.
a) Biasanya IN memiliki kinerja paling lambat.
b) IN efisien ketika sebagian besar kriteria
filter ada dalam sub-query.
c) EXISTS efisien ketika sebagian besar kriteria
filter ada 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)
Daripada:
Select * from product p
where product_id IN
(select product_id from order_items
5) Penggunaan
EXISTS bukan DISTINCT ketika menggunakan gabungan yang melibatkan tabel dengan hubungan
one-to-many.
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);
Daripada:
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;
Daripada:
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;
Daripada:
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%';
Daripada:
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, '%');
Daripada:
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)
Daripada:
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';
Daripada:
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;
Daripada:
SELECT id, name, salary
FROM employee
WHERE salary + 10000 < 35000;
Menulis query sebagai
SELECT id, first_name, age
FROM student_details
WHERE age > 10;
Daripada:
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';
Daripada:
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 pertanyaan 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
Tidak ada komentar:
Posting Komentar