Dua Storage Engine utama penyimpanan tabel untuk database MySQL adalah InnoDB dan MyISAM.
Berikut ringkasan perbedaan fitur dan kinerjanya:
- InnoDB lebih baru dalam hal pengembangan sementara MyISAM lebih dulu ada.
- InnoDB lebih kompleks, sementara MyISAM lebih sederhana.
- InnoDB semakin ketat dalam integritas data, sementara MyISAM longgar.
- InnoDB menerapkan penguncian tingkat baris untuk insert dan update baris, sementara MyISAM menerapkan penguncian tingkat tabel.
- InnoDB memiliki transaksi, sementara MyISAM tidak.
- InnoDB memiliki kunci asing (Foreign Key) dan contraints sementara MyISAM tidak.
- InnoDB memiliki sistem revovery lebih baik dari pada MyISAM.
- MyISAM memiliki indeks pencarian teks penuh (full text search) sementara InnoDB tidak.
Mengingat perbedaan-perbedaan, InnoDB dan MyISAM memiliki kelebihan dan kekurangan yang unik terhadap satu sama lain.
- InnoDB cocok digunakan dimana integritas data lebih prioritas.
- Lebih cepat dalam insert update tabel karena menggunakan tingkat penguncian baris.
- Karena InnoDB harus menjaga hubungan yang berbeda antara tabel, database administrator dan pencipta skema harus mengambil lebih banyak waktu dalam mendesain model data yang lebih kompleks daripada MyISAM.
- Mengkonsumsi sumber daya sistem yang lebih seperti RAM. Direkomendasikan bahwa engine InnoDB didisable jika tidak perlu substansial untuk itu, setelah instalasi MySQL.
- Tidak adanya pengindeksan teks penuh (full text search).
Keuntungan MyISAM
- Sederhana untuk dirancang dan dibuat, sehingga lebih baik untuk pemula. dan tidak perlu khawatir tentang hubungan antara tabel.
- Lebih cepat dari InnoDB pada keseluruhan sebagai akibat dari struktur sederhana sehingga jauh lebih sedikit sumber daya server.
- Pengindeksan teks lengkap (full text search).
- Sangat baik untuk membaca-intensif (select) tabel.
Kekurangan dari MyISAM
- Tidak ada integritas data(misalnya kendala hubungan), yang kemudian datang tanggung jawab dan overhead dari para administrator database dan pengembang aplikasi.
- Tidak mendukung transaksi.
- Lebih lambat dari InnoDB untuk tabel yang sering insert dan diupdate, karena seluruh tabel terkunci untuk insert dan update.
Perbandingan tersebut cukup sederhana. InnoDB lebih cocok untuk data situasi kritis dimana table sering dilakukan insert dan update.
Disisi lain MyISAM, lebih cocok dengan aplikasi yang tidak cukup bergantung pada integritas data dan kebanyakan hanya memilih dan menampilkan data.
Penjelasan lain
Salah satu kelebihan dari MySQL adalah Anda dapat mendefinisikan tipe untuk tiap tabel. MySQL mendukung beberapa tipe tabel, tergantung konfigurasi saat proses instalasi MySQL. MySQL memiliki 3 (tiga) tipe data utama, yaitu
MyISAM, InnoDB dan HEAP.
Jika kita tidak menyebutkan tipe tabel saat membuat tabel, maka tipe tabel otomatis akan dibuat sesuai konfigurasi default server MySQL. Hal ini ditentukan oleh variabel default-table-type di file konfigurasi MySQL.
MyISAM
Tipe tabel MyISAM merupakan tipe tabel yang sederhana, stabil dan mudah digunakan. Jika kita akan menyimpan data sederhana yang tidak terlalu rumit, maka gunakanlah tipe tabel ini. Kelebihan utama MyISAM adalah kecepatan dan kestabilannya. Jika kita memilih tipe tabel MyISAM, maka MySQL secara otomatis
akan menentukan salah satu dari tiga jenis tabel MyISAM, yaitu :
a. MyISAM static. Jenis ini digunakan ketika semua kolom dalam tabel didefinisikan dengan ukuran yang pasti (fixed). Dengan kata lain, tidak ada kolom yang memiliki tipe seperti VARCHAR, TEXT dan BLOB. Karena sifatnya yang fixed, maka jenis ini akan lebih cepat, aman dan stabil.
b. MyISAM dymanic. Jenis ini digunakan ketika terdapat kolom dengan tipe yang dinamis, seperti tipe kolom VARCHAR. Keuntungan utama dari jenis ini adalah ukuran yang dinamis. Jadi sifatnya lebih efektif karena ukuran data (file) menyesuaikan isi dari masing-masing kolom (field).
c. MyISAM Compressed. Kedua jenis MyISAM, static dan dynamic dapat dikompresi menjadi satu jenis yaitu MyISAM Compressed dengan perintah myisamchk. Tentunya hasilnya lebih kecil dari segi ukuran. Tabel yang terkompresi tidak dapat dikenakan operasi seperti INSERT, UPDATE dan
DELETE.
InnoDB
Tipe tabel InnoDB merupakan tipe tabel MySQL yang mendukung proses transaksi. Tipe ini memiliki beberapa keunggulan, antara lain:
a. Mendukung transaksi antar tabel.
b. Mendukung row-level-locking.
c. Mendukung Foreign-Key Constraints.
d. Crash recovery.
HEAP
Tabel dengan tipe HEAP tidak menyimpan datanya di hardisk, tetapi menyimpan di RAM (memori). Tipe tabel ini biasanya digunakan sebagai tabel sementara (temporary). Tabel secara otomatis akan dihapus (hilang) dari MySQL saat koneksi ke server diputus atau server MySQL dimatikan.
Tipe Tabel yang Lain
Selain 3 (tiga) tipe tabel diatas, yaitu MyISAM, InnoDB dan HEAP, MySQL
juga mendukung tipe tabel yang lain, yaitu:
a. BDB. Tipe tabel ini mirip tipe tabel InnoDB, namun penggunaannya belum
maksimal.
b. Archieve. Tipe ini tersedia sejak MySQL versi 4.1. Tipe ini digunakan untuk menyimpan tabel yang terkompresi, dimana biasanya digunakan dalam
proses backup.
c. CSV. Tipe ini digunakan untuk menyimpan data dalam bentuk file text yangdibatasi dengan koma (delimiter). Tipe ini tersedia sejak MySQL versi 4.1.
d. NDB Table (MySQL Cluster). Tersedia sejak MySQL versi 4.1.
e. Federated (External Tables). Tipe ini tersedia sejak MySQL versi 5.0.
Mau nanya,
Maksudnya point no 4. InnoDB menerapkan tingkat baris kunci untuk memasukkan dan meng-update baris sementara MyISAM menerapkan tingkat kunci tabel, apa Mas?
apa ketika proses insert atau update, di Innodb yg di lock adalah row yang bersangkutan dan kalau di MyISAM seluruh table yang di lock?
Benar pernyataan mas adi “ketika proses insert delete atau update, di Innodb yg di lock adalah row yang bersangkutan dan kalau di MyISAM seluruh table yang di lock” sehingga pada innodb transaksi lain tidak perlu menuggu transaksi lainya
Wow. keren sekali artikelnya. Semoga terus dilanjutkan ya.
Terima kasih telah menulis ini. Saya jadi tahu perbedaan MyISAM dan InnoDB 😀
Terima kasih kembali
Mas Sugeng makasih yah… Boleh kan saya pake artikel’a buat referensi saya dalam pembuatan makalah… Boleh yah… makasih lagi.
Silakan saja.
Terima kasih kembali
nice post mas… informatif sekali…. kalo sempet main ke blog aku http://hidupbersahaja.wordpress.com
Terima kasih 🙂
Untuk hosting yang menyediakan mysql innodb hosting mana ya bang..! Mohon petunjuk kalo ada yang gratis buat uji coba.
Maaf tidak tau mas, saya biasa pake server perusahaan 😀
untuk mysql innodb bukannya bisa kita setting saat pembuatan table…??
Ya
jadi ini toh perbedaan nya.
Trimakasih.
sama sama
Mantab…
thx artikelnya sangat bermanfaat Mas..
kalo dalam satu database ada 2 type gimana gan?, misal nih table master kan jarang diupdate tuh jadi pakek myisam sedangkan table yang sering dibuat transaksi pakek innodb. Hehe, biar bs ambil jalan tengahnya, gimana?
Kenapa pakai InnoDB tentunya yang dibutuhkan adalah fitur foreignkey parentkey, untuk menjaga konsistensi data. Jika master MyISAM dan transaksi InnoDB berati kan tidak terjaga konsistensinya. lagian perfoma jika dibuat seperti itu juga minim atau bahkan tidak ada perubahan yg signifikan
Mas , saya pengembang website Pilkada sebuah daerah di Indonesia… Untuk memasukkan suara dari tiap kontestan ke calon, saya memakai tabel MyISAM dan saya sediakan back-up annya dalam bentuk Archieve atau Archieve Engine type.. Sebagaimana diketahui Archieve Engine adalah jenis database yang HANYA BISA ditulis (INSERT) dan dibaca (READ) tetapi sama sekali TIDAK AKAN pernah bisa diubah (UPDATE) atau dihapus (DELETE) sampai kiamat… Saya lakukan ini sebagai langkah antisipasi pencegahan , takutnya kalo (Amit2) website pemilihan Pilkada itu di-hack , Suara orang 1 memilih Calon A, kemudian sama si Hackers diganti calon B, saya punya backup nya di Archieve Engine.. Nah, menurut Mas, langkah saya dah bener belum ? Makasih sebelumnya
Untuk backup sebaiknya menggunakan environment yang berbeda dengan environment database transaksi.
Mas rian kan membuat mekanisme backup pada satu database yang sama kan? misal database/server transaksi dihack tentunya si hack pasti juga bisa dong memanipulasi si tabel archive. Beda kalo antisipasi backup dilain environtment. Si hacker mungkin bisa melakukan hack di database transaksi, tapi belum tentu bisa hack database backup.
Mas saya punya data hampir 3 juta row, kolom yang diquery ada 4 dan keempatnya sudah dikasih Index, tapi masalahnya karena kebutuhan sql selectnya jadi ribet dan paaaannnjaanggg (gabungan antara where and or join bla bla…), menurut mas mana yang terbaik innoDb atau MyIsam saat ini saya pake MyIsam untuk 1 kali select butuh waktu 8 s/d 12 second, jika memang InnoDb lebih cepat mau aku migrasi ke InnoDB
Tergantung seberapa besar perbandingan transaksi datanya. apakah banyak read atau banyak write
trims gan jadi nambah wawasan 🙂
berarti MyISAM lebih memungkinkan sering terjadinya deadlock? *eh *CMIIW
Ya
Reblogged this on Read Me Guys.
maksudnya MyISAM “tidak mendukung transaksi” itu bagaimana ya? Transaksi seperti apa?
Tolong jelasin ya! 🙂
Baca dulu tentang “database transaction”
Masih belum ngerti, kalo InnoDB mysql pada wordpress dipindah ke ke MyISAM bisa apa enggak ya? soalnya mau pindah ke MyISAM kayanya lebih ringan. Mhon pencerahannya gan 🙂
Bisa bisa saja, malah kalau pakai MyISAM bisa mendukung FULLTEXT SEARCH.
Terima kasih atas artikelnya