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.
Desain database Anda dengan benarMungkin 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 masalah-masalah 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.htmlGunakanlah 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:
- 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. - 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. - CSQL Cache
CSQL Cache adalah sebuah open-source data caching infrastruktur. Saya sendiri belum pernah menggunakan metode ini, namun tidak ada salahnya mencoba performanya.
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; |
SELECT judul, kutipan, pengarang FROM wp_posts; |
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; |
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 ); ) |
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-sql-query/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 |
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 don’t 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; |
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.htmSelalu 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); |
Source:
http://setoelkahfi.web.id/10-tips-untuk-mempercepat-akses-database-mysql/
http://www.sql-tutorial.com/sql-indexes-sql-tutorial/
Common Table Expression SQL Server, pengganti Sub Query :
ReplyDeletehttp://www.prihanantojoko.net/sql-common-table-expression-cte-teknik-yang-powerfull-alternatif-pengganti-sub-query/
nice information min
ReplyDeletealat pemotong simcard 3in1