Anda di halaman 1dari 3

10 Tips Untuk Mempercepat Akses Database MySQL

Relational Database Management System erat kaitannya dengan pengembangan aplikasi yang dinamis.
Karena dinamis, database memegang peranan yang vital dalam proses berjalannya sebuah logika program.
Untuk itu, performa dari sebuah database sangat menentukan kelancaran kerja sebuah aplikasi dinamis. Yang
mempengaruhi kecepatan akses sebuah database tidak hanya masalah hardware yang digunakan. Kita bisa
juga meningkatkan performa dari sebuah query ke database dengan beberapa trik. Berikut tip-tip
mempercepat query SQL pada RDBMS open-source yang paling banyak dipakai saat ini, MySQL.

Relational Database Management System


Desain database Anda dengan benar
Mungkin terdengar sangat standar, tetapi nyatanya banyak masalah yang timbul berkenaan dengan database
yang bersumber dari disain awal yang buruk. Bisa dibilang, pondasi yang buruk akan mnyebabkan masalahmasalah lain yang kadang lebih buruk.
Sebagai seorang programer pemula, kadang kita terbiasa menyimpan informasi, semisal informasi client dan
informasi pembayaran client di field yang berbeda pada tabel yang sama. Hal ini bukan hal yang baik bagi jika
ditinjau dari database system. Dan juga akan menjadi pekerjaan yang berat bagi developer yang akan
memaintance program selanjutnya. Selalu simpan informasi yang berbeda pada tabel yang terpisah.
Ketika akan membuat database, selalu simpan informasi berbeda di tabel yang berbeda, gunakan standar
penamaan yang jelas dan gunakan primary key.
Source: http://www.simple-talk.com/sql/database-administration/ten-common-database-design-mistakes/
Tahu apa yang harus Anda optimasi
Saat berinteraksi dengan sebuah databasem, berarti kita sedang membicarakan query. Sebelum memutuskan
untuk mengoptimasi query tertentu, hal yang sangat perlu diperhatikan adalah kita tahu informasi tentang
query tersebut. Anda bisa menggunakan perintah EXPLAIN untuk mendapatkan informasi dari query yang
Anda jalankan. Untuk lebih jelasnya perhatikan contoh penggunaanya di bawah ini:
EXPLAIN SELECT * FROM ref_table, table_lain WHERE ref_table.key_column = table_lain.column;
Source: http://dev.mysql.com/doc/refman/5.0/en/using-explain.html
Gunakanlah quey yang tercepat
Query tercepat adalah sebuah query yang tidak pernah Anda kirim. Maksudnya? Saat Anda mengirimkan
sebuah query ke database, sumber daya server Andalah yang kan menanganinya, karena memang itulah
tugasnya. Inilah poin penting dalam memilih query yang tercepat. Untuk website dengan traffic tidak sampai
100 visitor perhari mungkin tidak akan berpengaruh banyak. Tetapi untuk website dengan traffic tinggi, hal
terbaik yang dapat Anda lakukan untuk mempercepat performa database Anda adalah dengan cara cache
queries.
Banyak alternatif cara untuk melakukan cache query pada server website Anda, beberapa diantaranya adalah
sebagai berikut:
1.
AdoDB
AdoDB adalah sebuah abstraction layer library database untuk bahasa pemrograman PHP. Tools ini
menyediakan kemungkinan untuk menggunakan sistem database sesuai dengan relevansi Anda.
Misalnya MySQL, PostgreSQL, Interbase, dan lain sebagainya. Dan yang terpenting tools ini memang
dirancang untuk bekerja dengan kecepatan. Arsitektur AdoDB sangat sederhana, tetapi dengan
performa sistem caching yang powerful. Selain itu, AdoDB dilisensikan dibawah lisensi BSD. Hal ini
berarti end user dapat dengan bebas mengunakannya pada proyeknya masing-masing. Untuk
keperluan komersial, lisensi LGPL yang akan diseiakan.

2.
Memcached
Cara berikut untuk mencache query adalah dengan metode memcached. Memcached adalah sistem
caching memori terdistribusi yang sering dipakai untuk mempercepat website berbasis database
dinamis dengan meringankan beban database.
3.
CSQL Cache
CSQL Cache adalah sebuah open-source data caching infrastruktur. Saya sendiri belum pernah
menggunakan metode ini, namun tidak ada salahnya mencoba performanya.
Tampilkan hanya data yang perlu ditampilkan
Query SELECT yang paling umum digunakan adalah SELECT * FROM. Padahal dalam kenyataanya mungkin
Anda hanya perlku menampilkan beberapa field saja. Simbol * menunjukkan bahwa Anda ingin menampilkan
semua field yang tersedia.
SELECT * FROM wp_posts;
Daripada membuang-buang resource untuk data yang tidak kita butuhkan, sebaiknya pilihlah hanya filed atau
kolom yang memang Anda butuhkan. Seperti query berikut ini:
SELECT judul, kutipan, pengarang FROM wp_posts;
Efek dari query ini tidak akan terlihat secara signifikan untuk website dengan traffic kecil. Tetapi akan sangat
terasa perbedaannya saat digunakan pada website dengan traffic tinggi. Karena hal ini bergantung pada
intensitas query yang dilakukan.
Selalu gunakan LIMIT
Batas. Selalu batasi record yang ingin Anda tampilkan. Terkecuali memang Anda perlu untuk menampilkan
keseluruhan data dalam sebuah tabel. Kenyataannya, lebih sering Anda hanya mendapatkan jumlah record
tertentu dari database Anda. Contohnya blog saya ini, pada halaman beranda hanya akan menampilkan 5 entri
terbaru. Untuk keperluan ini, saya harus benar-benar menggunakan parameter LIMIT, yang hanya akan
menampilkan jumlah record yang diperlukan. Jika query Anda tidak disertai LIMIT, maka jika sebuah tabel
memiliki 100.000 record berbeda, server website Anda akan bekerja sangat keras dengan hasil yang
sebenarnya tidak perlu untuk ditampilkan.
SELECT judul, kutipan, pengarang FROM wp_posts LIMIT 10;
Hindari queries dalam pengulangan
MySQL adalah pasangan mesra PHP. Saat menggunakannya secara bersamaan, seringkali seorang programer
akan tergoda melakukan SQL query dalam sebuah looping (perulangan). Sebanyak perulangan itu terjadi,
sebanyak itulah query akan dijalankan. Hal ini ibarat menugaskan server untuk bekerja berulang-ulang, untuk
sebuah tugas yang bisa diringkas sekali jalan. Contoh kasusnya adalah seperti ini::
foreach ($display_order as $id => $urut) (
$sql = UPDATE SET kategori display_order = $ordinal WHERE id = $id;
mysql_query ($sql);
)
Bukan sebuah kesalahan sebenarnya, tetapi ada langkah yang lebih bijak untuk kasus di atas. Perhatikan query
dibawah ini:
UPDATE kategori
SET display_order = CASE id
WHEN 1 THEN 3
WHEN 2 THEN 4
WHEN 3 THEN 5
END
WHERE id IN (1,2,3)
Source: http://www.karlrixon.co.uk/articles/sql/update-multiple-rows-with-different-values-and-a-single-sqlquery/
Prioritaskan JOIN bukannya subqueries
Subqueries adalah sesuatu yang kadang menarik untuk dilakukan. Untuk kasus-kasus tertentu, sepertinya
metode ini adalah jalan terakhir untuk menyelesaikan masalah. Namun, sebagai seorang programmer,
subqueries adalah sesuatu yang bisa menggoda Anda menyalahgunakannya. Seperti terlihat dibawah ini,
subqueries bisa sangat membantu seorang programer:

SELECT a.id,
(SELECT MAX (created)
FROM posts
WHERE author_id = a.id)
AS latest_post FROM authors a
Tetapi tahukah Anda? Subqueries memang berguna, tetapi perannya sebenarnya masih bisa digantikan
dengan perintah JOIN, dengan performa yang jelas lebih cepat dari subqueries. Perhatikan contoh berikut:
SELECT a.id, MAX (p.created) AS latest_post
FROM authors a
INNER JOIN posts p
ON (a.id = p.author_id)
GROUP BY a.id
Source: http://20bits.com/articles/10-tips-for-optimizing-mysql-queries-that-dont-suck/
Berhati-hatilah menggunakan wildcard
In case you dont know, wildcard (%.%) adalah fasilitas untuk searching. Fasilitas ini sangat berguna saat kita
hendak melakukan pencarian dalam sebuah field. Wildcard dapat berperan dalam menggantikan satu atau
lebih karakter ketika kita mencari data dalam sebuah database. Bukan tidak boleh menggunakannya, tetapi
Anda harus berhati-hati dalam menggunakannya. Gunakan jika memang sangat diperlukan. Jika
memungkinkan, gunakan awalan atau postfix wildcard atau akhiran (prefix) wildcard untuk melakukan
pencarian sebuah data.
Alasannya dalah, full wildcard akan menampilkan kemungkinan yang lebih banyak jika dibandingkan dengan
postfix wildcard. Perhatikan contoh query dibawah ini:
# Full wildcard
SELECT * FROM table WHERE COLUMN LIKE %halo%;
# Postfix wildcard
SELECT * FROM TABEL WHERE COLUMN LIKE halo%;
# Prefix wildcard
SELECT * FROM TABEL WHERE COLUMN LIKE % hello;
Source: http://hungred.com/useful-information/ways-optimize-sql-queries/
Pertimbangkan untuk menggunakan UNION daripada OR
UNION dan OR adalah perintah yang identik. Keduanya dapat digunkan untuk menggaungkan hasil dari dua
atau lebih query. Mari kita bandingkan satu persatu dua query ini. Yang pertama menggunakan OR:
SELECT * FROM a, b WHERE a.p = b.q OR a.x = b.y;
Apakah tidak ada alternatif lain yang lebih baik? Perhatikan contoh berikut ini, yang akan mengembalikan hasil
yang sama seperti perintah di atas, tetapi akan lebih cepat:
SELECT * FROM a, b WHERE a.p = b.q
UNION
SELECT * FROM a, b WHERE a.x = b.y
Source: http://www.bcarter.com/optimsql.htm
Selalu gunakan Index
Index adalah kunci dari sebuah tabel. Index dalam konteks perpustakaan: Memungkinkan untuk mempercepat
pencarian sebuah judul buku berdasarkan ISBN, kode buku, atau nomer buku yang sudah terdata sebelumnya.
Index database berguna untuk menemukan informasi yang diminta lebih cepat, seperti sebuah indeks
perpustakaan akan memungkinkan seorang pembaca untuk menemukan apa yang mereka cari tanpa
menghabiskan waktu. Index dapat dibuat pada satu kolom atau kombinasi kolom dalam tabel database.
Sebuah index tabel adalah struktur database yang mengatur nilai-nilai dari satu atau lebih kolom dalam tabel
database dalam urutan tertentu.
Pertanyaan berikut ini akan membuat index pada Model kolom dari tabel Produk. Index disebut idxModel:
CREATE INDEX idxModel ON Product (Model);