Apa perbedaan antara InnoDB dan MyISAM?


17

Saya menggunakan MySQL sebagai basis data untuk proyek web saya saat ini. Saya baru mengenal MySQL. Tolong jelaskan kepada saya perbedaan antara InnoDB dan MyISAM.


jangan ragu untuk menambahkan tagg MySQL juga :)
Johan

Bukankah ini termasuk dalam stackoverflow?
ripper234

@ ripper234. Dua versi yang lebih baik dari posting ini (lebih banyak latar belakang; lebih banyak demonstrasi dari penelitian sebelumnya) ada di SO: stackoverflow.com/q/12614541/209139 dan stackoverflow.com/q/20148/209139 .
TRiG

Jawaban:


14

ISAM = Metode Akses Berurutan Terindeks dan pada dasarnya adalah file datar (untuk DBA yang dapat mengingat, berpikir Btrieve, atau B-Tree). Ini adalah teknologi yang sangat tua - tapi jangan biarkan itu membuat Anda berhenti menggunakannya. Karena ini adalah file datar (lebih lanjut tentang itu nanti), itu bukan relasional, dan karenanya bukan RDBMS, dan dengan demikian lebih tepat dalam beberapa situasi.

InnoDB adalah RDBMS lengkap seperti yang kemungkinan besar Anda kenal. MyISAM dapat terlihat bersifat relasional melalui lapisan lain yang ditambahkan di atas yang memelihara tautan, logika, dan integritas referensial Anda.

ISAM brilian jika Anda memiliki BANYAK catatan (seperti, 20 juta), dan sebagian besar catatan itu berdiri sendiri (yaitu Anda tidak perlu melakukan banyak tautan untuk mengambil data terkait). Ini sangat bergantung pada indeks dan jika Anda tidak memiliki indeks yang tepat, bersiaplah untuk waktu permintaan yang sangat lama. Contoh kasus: Kami memiliki tabel Btrieve ISAM dengan catatan 20M + dan untuk melakukan pengambilan dan memfilter data berdasarkan indeks yang akurat hampir instan. Menggunakan indeks yang salah secara harfiah 15 menit.

InnoDB sangat bagus untuk jika Anda memiliki banyak tautan relasional. Tabel A referensi bidang di Tabel B, yang referensi Tabel C dan D. InnoDB dapat mengambil catatan ini menggunakan semua jenis metode bergabung yang bagus (hash bergabung, dll), sedangkan database ISAM harus menjalankan beberapa sub-kueri untuk setiap satu baris dan cocokkan catatan secara manual.

Anda benar-benar harus melakukan kursus di database jika Anda ingin lebih detail dari itu!


ISAM sama relasionalnya dengan yang lain, hanya saja tidak dioptimalkan untuk itu.
LapTop006

Terima kasih 4 uraian singkat Anda. Sekarang pada dasarnya saya dibersihkan

5

Yang paling mendasar adalah InnoDB bersifat transaksional. MyIsam tidak. MyIsam umumnya sedikit lebih cepat, jadi jika Anda tidak memerlukan transaksi yang umumnya merupakan taruhan terbaik Anda. Untuk keterangan terperinci Anda harus membaca dokumentasi MySQL.


2

Dewasa ini kecuali Anda menggunakan tabel untuk data gaya log (lebih banyak INSERT kemudian SELECT, tidak ada transaksi) InnoDB biasanya lebih cepat, lebih dapat diandalkan, memiliki lebih banyak fitur, dll.

Satu-satunya fitur yang dimiliki MyISAM adalah pencarian teks lengkap yang baik untuk penggunaan dasar, tetapi kebanyakan orang menggunakan beberapa dari Lucene untuk hal yang serius.

Apa pun cara Anda harus menyetel MySQL sebagai default pada dasarnya ditetapkan untuk pentium 32MB yang dibagikan dengan layanan lain.


2

Agak terlambat untuk permainan ... tapi di sini ada posting yang cukup komprehensif yang saya tulis beberapa bulan yang lalu , merinci perbedaan utama antara MYISAM dan InnoDB. Raih secangkir teh (dan mungkin biskuit), dan nikmati.


Perbedaan utama antara MyISAM dan InnoDB adalah dalam integritas referensial dan transaksi. Ada juga perbedaan lain seperti penguncian, kembalikan, dan pencarian teks lengkap.

Integritas referensial

Integritas referensial memastikan bahwa hubungan antar tabel tetap konsisten. Lebih khusus lagi, ini berarti ketika sebuah tabel (mis. Listing) memiliki kunci asing (mis. ID Produk) yang menunjuk ke tabel yang berbeda (mis. Produk), ketika pembaruan atau penghapusan terjadi pada tabel menunjuk-ke, perubahan-perubahan ini mengalir ke penautan meja. Dalam contoh kami, jika suatu produk diganti namanya, kunci asing tabel penautan juga akan diperbarui; jika suatu produk dihapus dari tabel 'Produk', setiap daftar yang mengarah ke entri yang dihapus juga akan dihapus. Selain itu, setiap listing baru harus memiliki kunci asing yang menunjuk ke entri yang ada dan valid.

InnoDB adalah DBMS relasional (RDBMS) dan dengan demikian memiliki integritas referensial, sedangkan MyISAM tidak.

Transaksi & Atomicity

Data dalam tabel dikelola menggunakan pernyataan Bahasa Manipulasi Data (DML), seperti SELECT, INSERT, UPDATE, dan DELETE. Grup transaksi yang menggabungkan dua atau lebih pernyataan DML menjadi satu unit kerja, sehingga seluruh unit diterapkan, atau tidak ada yang sama sekali.

MyISAM tidak mendukung transaksi sedangkan InnoDB tidak.

Jika operasi terganggu saat menggunakan tabel MyISAM, operasi dibatalkan segera, dan baris (atau bahkan data dalam setiap baris) yang terpengaruh tetap terpengaruh, bahkan jika operasi tidak selesai.

Jika operasi terganggu saat menggunakan tabel InnoDB, karena menggunakan transaksi, yang memiliki atomicity, setiap transaksi yang tidak selesai tidak akan berpengaruh, karena tidak ada komit dibuat.

Mengunci meja vs Mengunci baris

Ketika kueri berjalan terhadap tabel MyISAM, seluruh tabel di mana kueri akan dikunci. Ini berarti pertanyaan selanjutnya hanya akan dieksekusi setelah yang sekarang selesai. Jika Anda membaca tabel besar, dan / atau ada operasi baca dan tulis yang sering, ini bisa berarti tumpukan pertanyaan yang sangat besar.

Ketika kueri berjalan terhadap tabel InnoDB, hanya baris yang terlibat dikunci, sisa tabel tetap tersedia untuk operasi CRUD. Ini berarti kueri dapat berjalan secara bersamaan di tabel yang sama, asalkan mereka tidak menggunakan baris yang sama.

Fitur dalam InnoDB ini dikenal sebagai konkurensi. Sehebat konkurensi, ada kelemahan utama yang berlaku pada rentang tabel tertentu, di mana ada overhead dalam peralihan di antara thread kernel, dan Anda harus menetapkan batas pada thread kernel untuk mencegah server berhenti. .

Transaksi & Kembalikan

Saat Anda menjalankan operasi di MyISAM, perubahannya diatur; di InnoDB, perubahan itu dapat dibatalkan. Perintah yang paling umum digunakan untuk mengendalikan transaksi adalah COMMIT, ROLLBACK dan SAVEPOINT. 1. COMMIT - Anda dapat menulis beberapa operasi DML, tetapi perubahan hanya akan disimpan ketika KOMIT dibuat 2. ROLLBACK - Anda dapat membuang semua operasi yang belum dilakukan. 3. SAVEPOINT - menetapkan poin dalam daftar operasi yang dapat dikembalikan ke operasi ROLLBACK

Keandalan

MyISAM tidak menawarkan integritas data - Kegagalan perangkat keras, shutdown yang tidak bersih dan operasi yang dibatalkan dapat menyebabkan data menjadi rusak. Ini akan membutuhkan perbaikan penuh atau membangun kembali indeks dan tabel.

InnoDB, di sisi lain, menggunakan log transaksional, buffer penulisan ganda dan pemeriksaan otomatis serta validasi untuk mencegah korupsi. Sebelum InnoDB membuat perubahan, itu merekam data sebelum transaksi menjadi file tablespace sistem yang disebut ibdata1. Jika ada kerusakan, InnoDB akan melakukan autorecover melalui pemutaran ulang log tersebut.

Pengindeksan FULLTEXT

InnoDB tidak mendukung pengindeksan FULLTEXT hingga MySQL versi 5.6.4. Pada penulisan posting ini, banyak versi MySQL penyedia hosting bersama masih di bawah 5.6.4, yang berarti pengindeksan FULLTEXT tidak didukung untuk tabel InnoDB.

Namun, ini bukan alasan yang sah untuk menggunakan MyISAM. Yang terbaik adalah beralih ke penyedia hosting yang mendukung versi MySQL terbaru. Bukan berarti tabel MyISAM yang menggunakan pengindeksan FULLTEXT tidak dapat dikonversi ke tabel InnoDB.

Kesimpulan

Kesimpulannya, InnoDB harus menjadi mesin penyimpanan pilihan Anda. Pilih MyISAM atau tipe data lain ketika mereka melayani kebutuhan tertentu.


1

Secara umum, aturan praktisnya adalah, jika Anda ingin kecepatan, gunakan MyISAM dan jika Anda ingin stabilitas, gunakan InnoDB. Ada hubungannya dengan atomicity jika saya ingat dengan benar.


3
Jika itu tidak benar lagi, InnoDB sebenarnya lebih cepat dalam banyak kasus.
LapTop006

1
dapatkah seseorang menambahkan tautan beberapa tolok ukur atau sesuatu ...?
Johan
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.