Optimasi pada Structured Query Language (SQL)

| More
Pemprograman C, Visual Basic, Java, Delphi dan lainnya merupakan pemprograman impetarive, yang berbentuk instruksi – instruksi inti. Sedangkan SQL merupakan bahasa pemprograman declarative, yang lebih berbentuk kalimat atau pernyataan. Dalam pengembangannya, SQL terbagi – bagi lagi dalam berbagai extension sehingga melahirkan berbagai sebutan seperti SQL/PSM (Persistent Stored Modules) yang merupakan standar ANSI/ISO, T-SQL (Transact-SQL) dari Microsoft dan SyBase, PL/SQL (Procedural Language) yang digunakan oleh Oracle, yang kemudian dikembangkan lagi menjadi PL/pgSQL yang digunakan PostgreSQL.

Optimasi dapat dilakukan dengan berbagai cara, dengan memahami tuning performance pada database dan best practice dari berbagai sumber, maka dapat dimiliki fundamental yang kuat dalam mengoptimalkan kinerja database. Optimasi sederhana berikut setidaknya memperbaiki atau mencegah permasalahan, dan meningkatkan performa RDBMS (Relational Database Management System).

  1. Menggunakan Index
    Index dapat meningkatkan kecepatan pencarian pada record yang diinginkan. Tapi adakalanya index scan tidak lebih cepat dari table scan, yaitu saat mengakses record dalam jumlah relatif kecil dan saat aplikasi memerlukan pembacaan secara keseluruhan. Sebaliknya dalam mengakses record yang besar pada field tertentu, index scan dapat mengurangi operasi pembacaan I/O sehingga kinerja lebih cepat.

    Sebagai patokan, tentukan index pada field yang sering digunakan, yaitu yang sering diakses klausa WHERE, JOIN, ORDER BY, GROUP BY.

  2. Menentukan Tipe Data yang Tepat
    Tipe data yang terlalu kecil atau terlalu besar bagi field dapat menimbulkan masalah seiring pertambahan data. Misalnya : kapan kita menggunakan tipe data char atau varchar. Keduanya menampung karakter, bedanya char menyediakan ukuran penyimpanan yang tetap (fixed length), sedangkan varchar menyediakan ukuran penyimpanan sesuai isi data (variable length).

    Patokan umum : char jika field untuk data dengan panjang yang konsisten, varchar jika data memiliki panjang bervariasi, atau varchar(max) jika ukuran melebihi 8000 byte.

  3. Tidak Mengizinkan Nilai Null
    Nilai null kadang rancu dalam intepretasi programmer dan dapat mengakibatkan kesalahan logika pemrograman. Field null juga mengonsumsi byte tambahan sehingga menambah beban pada query yang mengaksesnya. Lebih baik jika diberikan nilai default pada field tersebut.

  4. Menulis Query yang Mudah Terbaca
    Query panjang yang ditulis dalam 1 baris dapat menyulitkan modifikasi dan pemahaman, sehingga perlu format yang mudah dicerna. Pemilihan huruf besar dan kecil juga mempermudah pembacaan. Biasanya keyword SQL ditulis dalam huruf kapital.

  5. Menghindari SELECT *
    Jika ingin memproses field tertentu, sebaiknya tulis field yang ingin diakses saja menjadi SELECT field1, field2, field3. Walaupun kode menjadi panjang tapi ini akan mengurang beban lalu lintas jaringan dan lock pada tabel, terutama jika tabel memiliki banyak field dan berukuran besar.

  6. Membatasi ORDER BY
    Pengurutan ORDER BY akan menambah satu proses lagi, yaitu proses sort. Karena itu gunakan ORDER BY jika hanya benar – benar dibutuhkan. Jika dimungkinkan lakukan pengurutan pada sisi client dan tidak pada sisi server.

  7. Menggunakan Subquery atau JOIN
    Biasanya instruksi dalam bentuk JOIN lebih cepat dibandingkan subquery. Namun bisa jadi sebaliknya jika dalam kondisi penggunaan JOIN yang terlalu banyak, ataupun logika query yang belum optimal.

  8. Menggunakan WHERE dalam SELECT
    Klausa WHERE digunakan untuk menyaring record sehingga meminimalkan beban jaringan. Untuk penambahan kondisi tertentu dapat menyambung query tersebut dengan klausa AND diikuti kondisi yang diinginkan.

  9. Pertimbangkan Kecepatan Akses Operator
    WHERE 1=1 dan WHERE 1<>0 memiliki kondisi yang sama tetapi memiliki kecepatan proses yang berbeda. Dari sisi kinerja, urutan operator yang paling cepat adalah : (1) = (2) >, >=, <, <= (3) LIKE (4) <>.

  10. Membatasi Jumlah Record
    Bayangkan jika query mengjasilkan jutaan record dan query tersebut diakses oleh ratusan pengguna dalam waktu bersamaan. Proses akan sangat berat. Untuk itu perlu pembatasan jumlah record. Pada SQL Server dapat menggunakan operator TOP, dan pada MySQL dapet menggunakan operator LIMIT.

  11. Membatasi Penggunaan Function
    Gunakan fungsi – fungsi tersedia SQL seperlunya saja. Misal : penggunaan ucase agar meyakinkan penyaringan data SELECT ... WHERE ucase(nama) = 'tes' dapat dihilangkan menjadi SELECT ... WHERE nama = 'tes' jika database tidak case sensitive.

  12. Menulis Kondisi Paling Sederhana dari Kiri ke Kanan
    Query yang ditulis akan diproses dari kiri ke kanan. Logika operator AND akan menghasilkan nilai false jika ditemukan salah satu kondisi false, maka letakkan kondisi paling mungkin memiliki nilai false atau kondisi paling sederhana pada posisi paling kiri sehingga SQL tidak perlu lagi mengevaluasi kondisi berikutnya saat menemukan salah satu kondisi telah bernilai false.

  13. Mengganti Gambar dalam Database
    Database dapat menyimpan gambar secara fiasik. Namun lebih baik jika dapat memisahkan gambar secara fisik dari database, diganti dengan menyimpan link atau lokasi gambar, maka ukuran database dan beban database akan relatif berkurang drastis, dan proses back-up dan migrasi akan mudah dilakukan.

0 komentar

Make A Comment
top