Cara optimalisasi database mysql


Database menjadi salah satu isu performa yang paling sering menjadi penyebab pada aplikasi , apalagi database yang memiliki data yang banyak dan menjadikan waktu throughput mempengerahui response time.

Untuk mengatasi hal tersebut maka ada yang namanya SQL Tuning, biasanya yang mengurus tentang ini berprofesi sebagai seorang DBA ( Database Administrator ) tapi tidak ada salahnya anda mengetahuinya jika anda berprofesi sebagai Fullstack Developer dan Tech Enthusiast.

SQL Tuning And Optimization
SQL Tuning adalah proses optimasi untuk membuat syntax query yang berbeda namun untuk mendapatkan hasil yang sama.

Lho terus kenapa bisa menggunakan syntax yang berbeda kalau hasilnya sama aja? apakah SQL tuning itu penting?

SQL Tuning biasanya diterapkan untuk mencari waktu throughput terbaik dari syntax SQL yang berbeda.

Disini ada beberapa cara untuk menerapkan SQL Tuning untuk meningkatkan performa pada database.

1.Menggunakan SELECT nama_kolom sebagai ganti SELECT *
kadang masih ada yang sering memanggil semua kolom yang ada di sebuah tabel padahal yang dibutuhin cuman beberapa kolom, kalau begitu lebih baik panggil beberapa kolom saja untuk meningkatkan performa dari database.

2.Buatlah kolom yang penting saja dan minimalisir membuat banyak kolom.
Kadang masih ada yang membuat banyak kolom yang sebenarnya tidak penting.
CONTOH : 
is_activated (tinyint) , activated_at (timestamp) , is_blocked (tinyint), blocked_at (timestamp)
padahal sebenarnya bisa menggunakan kolom activated_at dan blocked_at saja.

ya tinggal detect aja, kalau akunnya aktif , liat activated_at null atau engga, kalau akunnya ke block liat blocked_at null atau engga.

3. Hindari penggunaan DISTINCT pada syntax SQL
Distinct biasanya digunakan untuk menghapus query yang duplikat.
untuk menghindari distinct biasanya kita menggunakan unique pada field tersebut.

4. Hindari mencari data menggunakan Cartesian atau CROSS JOIN
Contoh Cross Join : 
SELECT noob.id,noob.hate_level 
FROM noob,haters
WHERE noob.id = haters.noob_id

Bayangkan jika tabel noob mempunyai 100 data yang masing masing data mempunyai 100 data haters , cross join akan terlebih dahulu memanggil semua hasil row baru memfilter row tersebut , database akan bekerja 10x lipat dari yang seharusnya. Wew!

Cara mengatasi cross join cukup menggunakan INNER JOIN
Contoh Inner Join :
SELECT noob.id,haters.name 
FROM noob
INNER JOIN haters
ON noob.id = haters.noob_id

Disini database hanya menghasilkan data dimana data yang dihasilkan memiliki isi kolom di tabel noob yang sama dengan tabel haters.

5.Gunakan wildcard atau % pada akhiran kata saja.
Misalnya :
SELECT nama FROM study WHERE nama LIKE %kuliah%

akan menghasilkan
Kuliah Komputer, Kuliah Umum , Kuliah Online

kueri ini akan menghasilkan banyak data tanpa memperdulikan letak kuliah didepan atau dibelakang dan ini sangat tidak efisien.

cara yang lebih efisien misalnya
SELECT nama FROM study WHERE nama LIKE kuliah%

akan menghasilkan
Kuliah Online , dll

cara ini lebih efisien untuk mengoptimasi hasil query.

Hal lain yang harus dihindari lainnya :
Subquery yang bersarang (SELECT Inside WHERE)
Multiple Schema query (UNION)
Looping statement didalam query, kasusnya sering ditemukan ketika ingin menampilkan id berurutan karena tidak ingin menggunakan looping php yang tidak dinamis mengikuti pagination

Sekian sharing dari saya semoga bermanfaat,
dan hal terakhir yang ingin saya sampaikan.

MySQL ,Oracle, PostgreSQL lebih baik mana?
MySQL/MariaDB jelas dibawahnya PostgreSQL dan Oracle, namun jika digunakan secara optimal dan skala aplikasi kecil maka hasilnya sudah cukup bagus


Sumber: Grup Telegram Tech Enthusiast

No comments for "Cara optimalisasi database mysql"