Anda di halaman 1dari 21

Latar Belakang

Optimasi SUBQUERY

OPTIMASI
QUERY
Optimasi LEFT
JOIN DAN RIGHT
JOIN

Optimasi Index Merge

COKORDA GEDE AGUNG YUDI DHARMA PUTRA (1


I GEDE EDDY ANJASMARA PUTRA (17)
LUH GEDE AYU CANDRAWATI

KELOMPOK
3

I NYOMAN YOGI ADI WARDANA

ADRIANTI RUSLI

(18)
(42)

(58)

APA ITU OPTIMASI


QUERY ?

OPTIMASI QUERY
Optimasi Query merupakan sebuah proses memilih
query plan yang paling efisien dari banyak strategi
pengaksesan query
Apa saja yang menyebabkan akses ke database kurang
maksimal?
Kenapa optimasi perintah SQL penting?

Cara mengoptimalkan Query:


Penggunaan query index
Hindari query SELECT *
Batasi penggunaan ORDER BY

Index Merge
Optimization
Index Merge method adalah metode yang biasanya
digunakan untuk mengambil baris dengan beberapa
pencarian range dan menggabungkan hasil mereka
menjadi satu

Index merge optimization


Index Merge Intersection Access Algorithm
The Index Merge Union Access Algorithm
The Index Merge Sort-Union Access Algorithm

CONTOH
OPTIMASI LEFT
JOIN DAN RIGHT
JOIN

OPTIMASI LEFT JOIN dan RIGHT JOIN


Tabel B berelasi pada tabel A dan semua tabel
dimana tabel A berelasi.
Tabel A berelasi pada semua tabel (kecuali tabel
B) yang digunakan dalam kondisi LEFT JOIN.
Kondisi LEFT JOIN digunakan untuk menampilkan
data-data yang tidak berelasi. (Dengan kata lain,
data yang tidak berelasi bernilai NULL).
Aturan pada right join merupakan kebalikan dari left
join

SELECT *
FROM a JOIN b LEFT JOIN c ON (c.key=a.key)
LEFT JOIN d ON (d.key=a.key)
WHERE b.key=d.key;

Perbaikan dalam hal ini adalah membalik urutan di


mana a dan b tercantum dalam penggunaan FROM:
SELECT *
FROM b JOIN a LEFT JOIN c ON (c.key=a.key)
LEFT JOIN d ON (d.key=a.key)
WHERE b.key=d.key;

Untuk LEFT JOIN, jika kondisi WHERE bernilai salah untuk baris yang
bernilai NULL, LEFT JOIN diubah menjadi normal join. Misalnya,
kondisi WHERE akan bernilai salah dalam query berikut jika
t2.column1 bernilai NULL:

SELECT *
FROM t1 LEFT JOIN t2 ON (column1)
WHERE t2.column2=5;
Oleh karena itu, lebih aman untuk mengkonversi query ke normal join:

SELECT *
FROM t1, t2 WHERE t2.column2=5
AND t1.column1=t2.column1;

Hal ini dapat dilakukan lebih cepat karena MySQL dapat menggunakan
tabel t2 sebelum tabel t1 jika hal itu akan menghasilkan query plan yang
lebih baik.

OPTIMASI SUBQUERY

Optimasi MySQL Query memiliki strategi


berbeda untuk mengevaluasi subquerie.
Untuk IN (or = ANY) subqueries,
optimasinya mempunyai pilihan sebagai
berikut:
Semi-join
Materialization
EXISTS strategy

Untuk NOT IN (or <> ANY) subqueries,


optimasinya mempunyai pilihan sebagai
berikut:
Materialization
EXISTS strategy

Optimasi Subqueries dengan Transformasi


Semi-Join
Optimasi menggunakan strategi semi-join untuk meningkatkan eksekusi
subquery.
Query dapat dieksekusi sebagai semi-join yaitu operasi yang hanya
mengembalikan hanya satu hasil dari setiap baris di tabel1 yang cocok
dengan tabel lainnya. Tidak mengembalikan hasil duplikasi yang sama
berulang-ulang.

Materialization subquery
Optimizer menggunakan materialisasi subquery sebagai strategi yang
memungkinkan pengolahan subquery lebih efisien.
Materialisasi mempercepat eksekusi query dengan menampilkan hasil
subquery sebagai tabel sementara, biasanya di memori. Ketika MySQL
pertama kali membutuhkan hasil subquery tersebut, hasilnya di materialisasi
ke dalam tabel sementara.
Berikutnya setiap kali hasilnya diperlukan, MySQL mengacu lagi ke tabel
sementara. tabel diindeks dengan hash indeks untuk membuat pencarian
cepat dan murah. indeksnya unik, yang membuat tabel menjadi lebih kecil
karena tidak memiliki duplikat.

Optimasi Subqueries dengan EXISTS Strategy

Optimasi tertentu berlaku untuk perbandingan yang


menggunakan operator IN untuk menguji hasil subquery
(or = ANY, yang setara). Bagian ini membahas optimasi
ini, khususnya yang berkaitan dengan tantangan ketika
ada nilai NULL.

Pertimbangkan perbandingan subquery berikut:

outer_expr IN (SELECT inner_expr FROM ... WHERE


subquery_where)

MySQL mengevaluasi permintaan "dari luar ke


dalam." Artinya, yang pertama diperoleh
adalah nilai outer expression outer_expr, dan
kemudian menjalankan subquery dan
menangkap baris yang dihasilkan.

Sebuah optimasi yang sangat berguna adalah untuk memberi tahu subquery
bahwa satu-satunya baris yang menarik adalah baris di mana inner expression
inner_expr sama dengan outer_expr. Hal ini dilakukan dengan menekan
persamaan yang sesuai ke klausa WHERE dalam subquery. Perbandingan
tersebut dikonversi ke:

EXISTS (SELECT 1 FROM ... WHERE subquery_where AND outer_expr=inner_expr)

ANY QUESTION ?

Anda mungkin juga menyukai