Tips Mudah Untuk Mengoptimalkan Kueri SQL Anda - CRUDPRO

Tips Mudah Untuk Mengoptimalkan Kueri SQL Anda

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;