Apa InnoDB
dan MyISAM
masuk MySQL
?
Apa InnoDB
dan MyISAM
masuk MySQL
?
Jawaban:
InnoDB
dan MYISAM
, apakah mesin penyimpanan untuk MySQL
.
Keduanya berbeda dalam penerapan pengunciannya: InnoDB
mengunci baris tertentu dalam tabel, dan MyISAM
mengunci seluruh MySQL
tabel.
Anda dapat menentukan jenisnya dengan memberikan MYISAM
ATAU InnoDB
saat membuat tabel di DB.
Silahkan lihat
InnoDB adalah mesin penyimpanan untuk MySQL, yang disertakan sebagai standar di semua biner saat ini yang didistribusikan oleh MySQL AB. Peningkatan utamanya atas mesin penyimpanan lain yang tersedia untuk digunakan dengan MySQL adalah dukungan transaksi yang sesuai dengan ACID
MyISAM adalah mesin penyimpanan default untuk versi sistem manajemen database relasional MySQL sebelum 5.5 1 . Ini didasarkan pada kode ISAM yang lebih lama tetapi memiliki banyak ekstensi yang berguna. Kekurangan utama MyISAM adalah tidak adanya dukungan transaksi. Versi MySQL 5.5 dan yang lebih baru telah beralih ke mesin InnoDB untuk memastikan batasan integritas referensial, dan konkurensi yang lebih tinggi.
Mereka adalah mesin penyimpanan.
http://dev.mysql.com/doc/refman/5.1/en/storage-engines.html
MyISAM: Mesin penyimpanan MySQL default dan yang paling banyak digunakan di Web, gudang data, dan lingkungan aplikasi lainnya. MyISAM didukung di semua konfigurasi MySQL, dan merupakan mesin penyimpanan default kecuali Anda telah mengkonfigurasi MySQL untuk menggunakan yang berbeda secara default.
InnoDB: Mesin penyimpanan yang aman untuk transaksi (sesuai ACID) untuk MySQL yang memiliki kemampuan commit, rollback, dan crash-recovery untuk melindungi data pengguna. Penguncian tingkat baris InnoDB (tanpa eskalasi ke kunci granularitas yang lebih kasar) dan pembacaan nonlocking konsisten gaya Oracle meningkatkan konkurensi dan kinerja multi-pengguna. InnoDB menyimpan data pengguna dalam indeks berkerumun untuk mengurangi I / O untuk kueri umum berdasarkan kunci utama. Untuk menjaga integritas data, InnoDB juga mendukung batasan integritas referensial FOREIGN KEY.
Saya ingin menambahkan bahwa memiliki kemampuan untuk menentukan mesin penyimpanan spesifik per tabel adalah salah satu kekuatan utama MySQL (selain mudah digunakan dan kinerja yang baik tanpa penyesuaian). Untuk semua operasi yang memerlukan transaksi, cukup gunakan InnoDB. Namun, MyISAM benar-benar dapat mempercepat ketika transaksi tidak diperlukan dalam situasi tertentu - dan membutuhkan lebih sedikit ruang disk dan RAM dibandingkan dengan InnoDB.
Karena itu, InnoDB menjadi lebih baik setiap saat:
MyISAM tidak mengikuti ACID sebagai lawan InnoDB yang mengikuti transaksi untuk menjaga integritas data.
MyISAM mendukung penyisipan bersamaan: Jika tabel tidak memiliki blok bebas di tengah file data, Anda dapat MENYISIPKAN baris baru ke dalamnya pada saat yang sama saat utas lain membaca dari tabel. MySqlDoc
Itulah sebabnya, MyISAM lebih cepat dan lebih sedikit ruang. Misalnya, Mesin Penyimpanan MyISAM MySQL tidak mendukung transaksi. kendala MySQL MYISAM Ada sedikit yang disebut concurrent-insert Secara default, variabel diatur ke 1 dan penyisipan bersamaan ditangani seperti yang baru saja dijelaskan. Jika disetel ke 0, penyisipan serentak dinonaktifkan. Jika diatur ke 2, penyisipan bersamaan di akhir tabel diizinkan bahkan untuk tabel yang telah menghapus baris. Pernyataan INSERT dapat dieksekusi untuk menambahkan baris ke ujung tabel dengan memilih pada saat yang sama jika tidak ada lubang / baris yang dihapus di tengah tabel (pada saat penyisipan bersamaan).
Tingkat isolasi default dari mysql InnoDB adalah "Read Repeatable". Untuk MyISAM, tidak ada transaksi. InnoDB menggunakan penguncian level baris sementara MyISAM hanya dapat menggunakan penguncian level tabel, itulah sebabnya InnoDB memiliki crash revovery lebih baik daripada MyISAM. Seseorang harus secara manual mendapatkan kunci level tabel di MyISAM jika seseorang ingin menghindari efek konkurensi.
InnoDB adalah mesin penyimpanan transaksional MySQL sedangkan MyISAM adalah mesin penyimpanan non-transaksional. Dengan kata lain, InnoDB mengikuti properti ACID untuk menjaga integritas data tetapi MyISAM tidak mengikuti properti ACID sehingga gagal menjaga integritas data.
Dalam tabel InnoDB (transaksional), perubahan transaksional dapat dengan mudah dibatalkan jika rollback diperlukan. Tetapi perubahan yang dibuat pada tabel MyISAM (non-transaksional) tidak dapat dibatalkan saat memutar kembali transaksi diperlukan.
Misalnya, Anda ingin mentransfer uang dari rekening koran Anda ke rekening tabungan. Ini dilakukan dengan transaksi yang mencakup 5 kueri.
1 START TRANSACTION;
2 SELECT balance FROM checking WHERE customer_id = 10233276;
3 UPDATE checking SET balance = balance - 200.00 WHERE customer_id = 10233276;
4 UPDATE savings SET balance = balance + 200.00 WHERE customer_id = 10233276;
5 COMMIT;
Misalkan, proses macet pada langkah 4. Jika tabel InnoDB digunakan di sini, rollback akan membatalkan perubahan dan Anda diselamatkan dari risiko kehilangan uang. Secara harfiah, tabel tidak menyadari adanya kerusakan karena perubahan tidak akan diterapkan ke tabel kecuali langkah 5 berhasil dijalankan.
Tetapi dalam kasus tabel MyISAM, seseorang tidak dapat membatalkan perubahan transaksional ketika rollback dipanggil atau jika terjadi crash yang menyebabkan kegagalan transaksi. Artinya, jika transaksi gagal pada langkah 3, uang akan dikurangkan dari rekening koran Anda. Tetapi uang tidak akan ditambahkan ke rekening tabungan Anda.
Contoh milik: "MySQL Kinerja Tinggi: Pengoptimalan, Cadangan, dan Replikasi" - Buku oleh Arjen Lentz, Derek J. Balling, Jeremy Zawodny, Peter Zaitsev, dan Vadim Tkachenko
Ketika server MySQL Anda rusak, data dapat dipulihkan dengan lebih mudah dari satu set tabel MyISAM daripada dari file transaksi InnoDB yang besar itu. Setiap tabel MyISAM memiliki file terpisah, dan jika tidak ada operasi tulis yang dilakukan ke tabel ini selama crash - itu sama sekali tidak akan terpengaruh. Dalam kasus InnoDB, seluruh file transaksi dari seluruh server MySQL harus diindeks ulang atau apa pun yang dilakukannya setelah crash. Itu bisa menjadi sangat berantakan.
InnoDB adalah defaultnya BUKAN myISAM https://dev.mysql.com/doc/refman/5.7/en/innodb-introduction.html "InnoDB adalah mesin penyimpanan MySQL default. Kecuali Anda telah mengkonfigurasi mesin penyimpanan default yang berbeda, Pernyataan CREATE TABLE tanpa klausa ENGINE = membuat tabel InnoDB "