Tips Mudah Untuk Mengoptimalkan Kueri SQL Anda
Test using EXPLAIN:
Langkah pertama dalam mengoptimalkan kueri SQL ialah mencari tahu di mana dan bagaimana kueri itu tidak dioptimalkan.
EXPLAIN command provides informasi tentang bagaimana database menjalankan kueri Anda. Berikut cara menguji dan mengoptimalkan kueri Anda menggunakan EXPLAIN:
EXPLAIN SELECT *
FROM customers
WHERE country = 'USA';
Ini akan menampilkan rencana eksekusi kueri, menunjukkan urutan tabel diakses, perkiraan memory dan waktu eksekusi, jumlah baris yang diproses, index apa pun itu yang digunakan, dan banyak lagi!
Berdasarkan info ini, Anda bisa mengoptimalkan kueri dengan menggunakan beberapa teknik berikut ini.
Avoid using “SELECT *”:
Alih-alih memilih semua kolom dari tabel, pilih saja kolom yang benar-benar Anda butuhkan. Ini bisa secara signifikan mengurangi jumlah data yang perlu diproses.
SELECT customer_id, name, email
FROM customers
WHERE country = 'USA';
Use JOINs wisely:
Gunakan jenis JOIN yang paling efektif berdasarkan data yang Anda pakai.
Common joins terdaftar dari yang paling cepat hingga yang paling lambat:- INNER
- LEFT/RIGHT
- FULL OUTER
- CROSS (Cartesian)
Anda juga ingin memastikan kondisi join dioptimalkan. Coba gunakan primary key to foreign key relation dan hindari relasi banyak-ke-banyak jika memungkinkannya.
SELECT orders.order_id, customers.name
FROM orders
INNER JOIN customers
ON orders.customer_id = customers.customer_id;
Filter data effectively:
Gunakan WHERE clause untuk memfilter data as early as possible. Hindari penggunaan fungsi dan kalkulasi dalam WHERE clause karena bisa memperlambat kueri.
Inefficient:
SELECT order_id, order_date
FROM orders
WHERE YEAR(order_date) = 2022;
Optimized!
SELECT order_id, order_date
FROM orders
WHERE order_date >= '2022-01-01'
AND order_date <= '2022-12-31';
Use appropriate comparison operators:
Use “=” instead of “LIKE” saat membandingkan pencocokan sama persis, karena ini bisa mempercepat waktu eksekusi kueri.
SELECT customer_id, name, email
FROM customers
WHERE email = '[email protected]';
Use EXISTS instead of COUNT:
Gunakan EXISTS daripada COUNT untuk memeriksa keberadaan catatan, karena dapat mempercepat waktu eksekusi kueri.
Inefficient:
SELECT *
FROM orders
WHERE (
SELECT COUNT(*) FROM order_items
WHERE orders.order_id = order_items.order_id
) > 0;
Optimized!
SELECT *
FROM orders
WHERE EXISTS (
SELECT * FROM order_items
WHERE orders.order_id = order_items.order_id
);
Use UNION ALL instead of UNION:
Saat menggabungkan beberapa rangkaian hasil, gunakan UNION ALL bukan UNION, karena ini tidak menghapus catatan duplikat dan dapat meningkatkan kinerja kueri.
SELECT customer_id, name
FROM customers
WHERE country = 'USA'
UNION ALL
SELECT customer_id, name
FROM customers
WHERE country = 'Canada';
Use LIMIT or TOP:
Jika Anda hanya perlu mengambil sejumlah kecil rekaman, gunakan LIMIT atau TOP untuk membatasi jumlah rekaman yang dikembalikan.
SELECT *
FROM orders
ORDER BY order_date DESC
LIMIT 10;
Use GROUP BY and HAVING sparingly:
GROUP BY dan HAVING dapat sangat bermanfaat untuk meringkas data, tetapi bisa juga sangat lambat. Coba gunakan hanya jika dibutuhkan dan optimalkan sebanyak-banyaknya, seperti mengelompokkan berdasarkan kolom dengan kardinalitas rendah.
SELECT customer_id, COUNT(*) AS num_orders
FROM orders
GROUP BY customer_id
HAVING COUNT(*) >= 5;
Use stored procedures:
Gunakan prosedur tersimpan untuk mengkompilasi dan mengoptimalkan kueri yang sering digunakan, karena dapat meningkatkan kinerja secara signifikan.
CREATE PROCEDURE get_orders_by_customer (IN customer_id INT)
BEGIN
SELECT *
FROM orders
WHERE customer_id = customer_id;
END;
Artikel Terkait Lainnya :
- Bagaimana Melakukan Analisis Pesaing Dan Meningkatkan Strategi Digital Marketing Anda
- Merevolusi Web Development Dengan Menggunakan ChatGPT
- Dasar - Dasar Parsing JSON Dengan Jackson
- Apakah Matematika Sangat Penting Dalam Pemrograman?
- Simak Penjelasan Ini Agar Kamu Bisa Menjadi Backend Developer Yang Hebat!