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.
Bisakah kita menggunakan kedua mesin penyimpanan pada saat yang sama untuk database kita?
pengguna130561
2
Anda bisa, karena untuk setiap tabel Anda dapat menentukan mesin penyimpanan yang berbeda. pertanyaan lain adalah jika Anda harus melakukannya. dalam dokumentasi mysql ada beberapa penjelasan tentang topik ini.
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.
Jadi saat kita menginstal MySQL, apakah kita perlu secara spesifik menentukan mesin penyimpanan yang akan digunakan sebagai database MySQL kita?
pengguna130561
3
Seperti yang disebutkan di posting saya, defaultnya adalah MyISAM. Jika Anda ingin menggunakan fitur mesin penyimpanan yang berbeda seperti INNODB, maka ya, Anda perlu menentukan. Ini tidak dilakukan selama penginstalan, melainkan dilakukan selama pembuatan tabel awal.
Menurut dev.mysql.com/doc/refman/5.5/en/storage-engine-setting.html : "Mesin default adalah InnoDB pada MySQL 5.5.5 (MyISAM sebelum 5.5.5)" Jadi mesin default sekarang InnoDB. Jawaban ini diposting 16 hari setelah rilis ketersediaan umum pertama dengan InnoDB sebagai mesin default;)
SOFe
6
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.
1STARTTRANSACTION;2SELECT balance FROM checking WHERE customer_id =10233276;3UPDATE checking SET balance = balance -200.00WHERE customer_id =10233276;4UPDATE savings SET balance = balance +200.00WHERE customer_id =10233276;5COMMIT;
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 "
Jawaban:
InnoDB
danMYISAM
, apakah mesin penyimpanan untukMySQL
.Keduanya berbeda dalam penerapan pengunciannya:
InnoDB
mengunci baris tertentu dalam tabel, danMyISAM
mengunci seluruhMySQL
tabel.Anda dapat menentukan jenisnya dengan memberikan
MYISAM
ATAUInnoDB
saat membuat tabel di DB.sumber
Silahkan lihat
InnoDB dan MyISAM
sumber
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.
sumber
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:
Peningkatan Kinerja dan Skalabilitas InnoDB 1.1
sumber
MyISAM tidak mengikuti ACID sebagai lawan InnoDB yang mengikuti transaksi untuk menjaga integritas data.
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.
sumber
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.
Misalnya, Anda ingin mentransfer uang dari rekening koran Anda ke rekening tabungan. Ini dilakukan dengan transaksi yang mencakup 5 kueri.
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
sumber
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.
sumber
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 "
sumber