Apa itu InnoDB dan MyISAM di MySQL?

122

Apa InnoDBdan MyISAMmasuk MySQL?

pengguna130561
sumber
8
Duplikat MySql: MyISAM vs. Inno DB! , atau Anda dapat memilih: stackoverflow.com/search?q=myisam+vs+innodb
OMG Ponies
Itu mesin database ... kavoir.com/2009/09/…
Matthieu
Bisakah kita menggunakan kedua mesin penyimpanan pada saat yang sama untuk database kita?
pengguna130561
1
Anda dapat melakukannya secara bersamaan pada tabel yang berbeda, tetapi untuk satu tabel tertentu Anda harus memilih mana yang ingin Anda gunakan ...
Matthieu

Jawaban:

111

InnoDBdan MYISAM, apakah mesin penyimpanan untuk MySQL.

Keduanya berbeda dalam penerapan pengunciannya: InnoDBmengunci baris tertentu dalam tabel, dan MyISAMmengunci seluruh MySQLtabel.

Anda dapat menentukan jenisnya dengan memberikan MYISAMATAU InnoDBsaat membuat tabel di DB.

Siva
sumber
Jawaban yang jelas dan sederhana.
vadiraj jahagirdar
38

Silahkan lihat

InnoDB dan MyISAM

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.

Adriaan Stander
sumber
1
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.
nano7
18

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.

mluebke.dll
sumber
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.
mluebke
3
Tetapi sesuai ini: - dev.mysql.com/doc/refman/5.7/en/storage-engines.html ; Mesin defaultnya adalah InnoDB.
Harsha
2
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:

Peningkatan Kinerja dan Skalabilitas InnoDB 1.1

Damir Bulic
sumber
4

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.

hai .nitish
sumber
3

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

Steffi Keran Rani J
sumber
1

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.

Alex Gnatko
sumber
0

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 "

adwairi
sumber