Artikel ini adalah artikel cermin dari terjemahan mesin, silakan klik di sini untuk melompat ke artikel aslinya.

Melihat: 13183|Jawab: 0

[Sumber] MyISAM adalah perbedaan antara mesin penyimpanan database MySQL dan InnoDB

[Salin tautan]
Diposting pada 13/04/2020 09.53.49 | | |
Ketika datang ke MySQL, akan sulit untuk memahami MyISAM dan InnoDB, yang merupakan dua mesin penyimpanan MySQL yang paling terkenal dan banyak digunakan. Hari ini, saya akan berbicara dengan Anda tentang perbedaan antara MyISAM dan InnoDB di MySQL...

Apa itu MyISAM?

MyISAM adalah mesin penyimpanan default untuk sistem manajemen database relasional MySQL (sebelum 5.5)。 Struktur penyimpanan tabel MySQL ini memperluas banyak fitur berguna dari kode ISAM lama. Dalam versi baru MySQL, mesin InnoDB secara luas menggantikan MyISAM karena keunggulannya dalam hal transaksi, integritas referensial, dan konkurensi yang lebih tinggi.
Setiap tabel MyISAM sesuai dengan tiga file pada hard disk. Ketiga file memiliki nama file yang sama, tetapi memiliki ekstensi yang berbeda untuk menunjukkan tujuan jenisnya: file .frm menyimpan definisi tabel, tetapi file ini bukan bagian dari mesin MyISAM, tetapi bagian dari server; .MYD menyimpan data tabel; .MYI adalah file indeks tabel.

Apa itu InnoDB?

InnoDB adalah mesin penyimpanan lain untuk MySQL, dan versi baru dari standar yang dirilis oleh MySQL AB disertakan dalam semua paket instalasi biner.5.5 dan seterusnya sebagai mesin penyimpanan default。 Keunggulannya dibandingkan mesin penyimpanan lainnya adalah dukungannya untuk transaksi yang kompatibel dengan ACID (mirip dengan PostgreSQL) dan integritas parameter (yaitu, dukungan untuk kunci asing).

Oracle Corporation mengakuisisi Innobase pada Oktober 2005. Innobase menggunakan otorisasi otentikasi ganda. Ini didistribusikan menggunakan GNU dan juga memungkinkan grup lain yang ingin memasukkan InnoDB ke dalam perangkat lunak komersial untuk mendapatkan lisensi.

Mesin penyimpanan yang paling populer adalah MyISAM dan InnoDB. Perbedaan utama antara MyISAM dan InnoDB adalah kinerja dan kontrol transaksi. MyISAM adalah implementasi yang diperluas dari ISAM awal (Indexed Sequential Access Method, ISAM tidak lagi didukung setelah MySQL 5.0), ISAM dirancang untuk menangani situasi di mana frekuensi baca jauh lebih besar daripada frekuensi tulis, sehingga ISAM dan kemudian MyISAM tidak mempertimbangkan dukungan sesuatu, mengecualikan TPM, tidak memerlukan catatan transaksi, efisiensi kueri ISAM cukup besar, dan konsumsi memori sangat kecil.
MyISAM mewarisi manfaat ini sambil mengikuti perkembangan zaman sejumlah besar fitur baru yang berguna dan alat terkait. Misalnya, mempertimbangkan kontrol konkurensi, kunci tingkat tabel disediakan, dan meskipun MyISAM sendiri tidak mendukung toleransi kesalahan, MyISAM dapat digunakan untuk memulihkan dari kegagalan melalui myisamchk. Dan karena MyISAM menggunakan file penyimpanan independennya sendiri (file data MYD dan file indeks MYI) untuk setiap tabel, sangat nyaman untuk mencadangkan dan memulihkan (menimpa salinan sudah cukup), dan juga mendukung pemulihan online. Dibandingkan dengan mesin penyimpanan lainnya, MyISAM memiliki sebagian besar alat untuk memeriksa dan memperbaiki meja. Tabel MyISAM dapat dikompresi, dan mendukung pencarian teks lengkap. Mereka tidak aman untuk transaksi, dan tidak mendukung kunci asing, jadi jika aplikasi Anda tidak memerlukan transaksi dan hanya menangani operasi CRUD dasar, maka MyISAM adalah cara yang tepat.
InnoDB dirancang untuk situasi baca dan tulis konkurensi tinggi, menggunakan MVCC (Multi-Version Concurrency Control) dan kunci tingkat baris untuk memberikan dukungan transaksi yang sesuai dengan ACID. InnoDB mendukung integritas referensi kunci asing dan memiliki kemampuan pemulihan kesalahan. Selain itu, kinerja InnoDB sebenarnya cukup baik, terutama saat memproses data dalam jumlah besar, secara resmi: efisiensi CPU InnoDB tidak ada bandingannya dengan mesin penyimpanan database relasional berbasis disk lainnya. Namun, pencadangan dan pemulihan InnoDB sedikit lebih merepotkan, kecuali Anda menggunakan dukungan Mulit-tablespace yang disediakan oleh versi 4.1 atau yang lebih baru, karena tidak seperti MyISAM, file data InnoDB tidak sesuai dengan setiap tabel secara independen. Sebagai gantinya, tablespace bersama digunakan, dan metode penimpaan salinan sederhana tidak cocok untuknya, dan data harus dipulihkan setelah menghentikan MYSQL. Menggunakan tablespaced per tabel membuat setiap tabel sesuai dengan file tablespace terpisah, situasinya jauh lebih sederhana. Ini memiliki karakteristik yang sama dengan jenis BDB, dan mereka juga mendukung kunci asing. Tabel InnoDB cepat dan memiliki fitur yang lebih kaya daripada BDB, jadi disarankan jika Anda membutuhkan mesin penyimpanan yang aman secara transaksional.

Secara umum, InnoDB adalah pilihan yang baik jika dukungan transaksi diperlukan dan memiliki frekuensi baca dan tulis bersamaan yang tinggi. BDB dapat dipertimbangkan jika frekuensi baca dan tulis bersamaan tidak tinggi, tetapi BDB tidak akan lagi didukung di MySQL 5.1 dan versi yang lebih baru. Opsi ini hilang

Secara default, transaksi InnoDB terbuka (set autocommit = 0), yang berarti bahwa setiap kali catatan dimasukkan, tabel InnoDB akan memperlakukannya sebagai transaksi terpisah. Jadi jika kita memasukkan 10.000 catatan dan tidak menutup transaksi, maka tabel tipe InnoDB akan memperlakukannya sebagai 10.000 transaksi, dan total waktu penyisipan saat ini banyak, saat ini, kita harus mematikan transaksi terlebih dahulu dan kemudian memasukkannya, sehingga kecepatannya akan sangat cepat Adapun Heap dan BDB (Berkeley DB), secara relatif, tingkat penetrasinya tidak sebaik dua sebelumnya, tetapi dalam beberapa kasus, Mesin penyimpanan Heap masih sangat dapat diterapkan, yang menyimpan data dalam memori, dan sangat cepat karena tidak ada disk I/O yang menunggu. Tetapi karena ini adalah mesin penyimpanan memori, modifikasi apa pun yang dilakukan akan hilang setelah server dimulai ulang. Heap adalah tempat yang tepat untuk menggunakan BDB untuk pengujian, karena ini adalah mesin penyimpanan pertama MySQL yang aman secara transaksional. Dibangun berdasarkan pustaka database DB Berkeley, ini juga aman secara transaksional, tetapi BDB jelas tidak sepopuler InnoDB, karena sebagian besar mesin penyimpanan di MySQL yang mendukung transaksi juga mencari MVCC atau mesin penyimpanan penguncian tingkat baris, sedangkan BDB hanya mendukung Kunci tingkat halaman.

Mesin InnoDB

InnoDB adalah mesin penyimpanan transaksional yang mendukung pengembalian dan dirancang untuk menyediakan layanan berperforma tinggi saat memproses data dalam jumlah besar, dan membuat kumpulan buffer dalam memori saat runtime untuk buffer data dan indeks.

Keunggulan mesin InnoDB:

1. Mendukung pemrosesan transaksi dan fitur transaksi ACID;

2. Empat tingkat isolasi standar SQL direalisasikan;

3. Mendukung kunci tingkat baris dan kendala kunci asing;

4. Anda dapat menggunakan log transaksi untuk pemulihan data.

5. Tingkat kunci adalah kunci baris, yang cocok untuk modifikasi tabel yang sering dengan konkurensi tinggi, dan konkurensi tinggi lebih baik daripada MyISAM. Kerugiannya adalah konsumsi sistemnya besar.

6. Indeks tidak hanya menyimpan cache sendiri tetapi juga menyimpan data, yang membutuhkan lebih banyak memori daripada MyISAM.

Kekurangan mesin InnoDB:

Karena tidak menyimpan jumlah baris dalam tabel, seluruh tabel dipindai saat menggunakan statistik COUNT.

Mesin MyISAM

MyISAM adalah mesin default sebelum MySQL 5.5.5 dan dirancang untuk membaca dengan cepat.

Keuntungan Mesin MyISAM:

1. Pembacaan berkinerja tinggi;

2. Karena menyimpan jumlah baris dalam tabel, seluruh tabel tidak akan dipindai saat menggunakan statistik COUNT;

Kekurangan mesin MyISAM:

1. Level kunci adalah kunci meja, dan keuntungan dari kunci jam tangan adalah overhead kecil dan kuncinya cepat; Kerugiannya adalah granularitas kunci besar, probabilitas impuls kunci tinggi, dan kapasitas konkurensi rendah, yang cocok untuk layanan berbasis kueri.

2. Mesin ini tidak mendukung transaksi atau kunci asing.

3. Operasi INSERT dan UPDATE perlu mengunci seluruh tabel;

4. Ini menyimpan jumlah baris dalam tabel, jadi ketika SELECT COUNT(*) FROM TABLE, hanya perlu langsung membaca nilai yang disimpan tanpa memindai seluruh tabel.

Skenario yang berlaku

MyISAM cocok untuk: (1) melakukan banyak perhitungan hitungan; (2) Penyisipan yang jarang dan pertanyaan yang sangat sering; (3) Tidak ada bisnis.

InnoDB cocok untuk: (1) persyaratan atau transaksi keandalan yang tinggi; (2) Pembaruan dan kueri tabel cukup sering, dan kemungkinan penguncian tabel relatif tinggi.

Perbandingan tabel

PropertiMyISAMTumpukanBDBInnoDB
transaksiTidak didukungTidak didukungDi dalam tangkiDi dalam tangki
Mengunci granularitasKunci mejaKunci mejaKunci Halaman (halaman, 8KB)Kunci
penyimpananPisahkan filedalam memoriSatu file per tabelRuang meja
Tingkat isolasitidaktidakBaca BerkomitmenSemua
Format portabeladaN/Atidakada
Kelengkapan kutipantidaktidaktidakada
Kunci utama datatidaktidakadaada
MySQL menyimpan catatan data dalam cachetidakYaYaYa
KegunaanVersi lengkapVersi lengkapMySQL-MaxVersi lengkap


Beberapa perbedaan detail


1. InnoDB tidak mendukung indeks jenis FULLTEXT, yang telah didukung sejak MySQL 5.6 (eksperimental).

2. InnoDB tidak menyimpan jumlah baris tertentu dari tabel, yaitu, saat menjalankan select count() dari tabel, InnoDB harus memindai seluruh tabel untuk menghitung berapa banyak baris yang ada, tetapi MyISAM hanya perlu membaca jumlah baris yang disimpan. Perhatikan bahwa ketika pernyataan count() berisi kondisi where, operasinya sama untuk kedua tabel.

3. Untuk bidang jenis AUTO_INCREMENT, InnoDB harus berisi indeks hanya dengan bidang tersebut, tetapi di tabel MyISAM, Anda dapat membuat indeks bersama dengan bidang lain.

4. Saat HAPUS DARI tabel, InnoDB tidak akan membuat ulang tabel, tetapi menghapusnya baris demi baris.

5. Operasi LOAD TABLE FROM MASTER tidak berfungsi untuk InnoDB, solusinya adalah terlebih dahulu mengubah tabel InnoDB ke tabel MyISAM, mengimpor data, lalu mengubahnya ke tabel InnoDB, tetapi tidak berlaku untuk tabel yang menggunakan fitur InnoDB tambahan (seperti kunci asing).

6. Selain itu, kunci baris tabel InnoDB tidak mutlak, jika MySQL tidak dapat menentukan rentang yang akan dipindai saat mengeksekusi pernyataan SQL, tabel InnoDB juga akan mengunci seluruh tabel.

7. InnoDB tidak mendukung pengindeksan teks lengkap, sedangkan MyISAM mendukung pengindeksan. Pengindeksan teks lengkap mengacu pada pembuatan indeks urutan terbalik dari setiap kata dalam char, varchar, dan teks (kecuali untuk kata berhenti). Indeks teks lengkap MyISAM sebenarnya tidak berguna, karena tidak mendukung segmentasi kata Cina, dan harus ditulis ke tabel data oleh pengguna setelah segmentasi kata, dan kata-kata dengan kurang dari 4 karakter Cina akan diabaikan seperti kata berhenti.





Mantan:Kumpulkan pertanyaan eksperimental
Depan:SQL ke jenis Varchar
Sanggahan:
Semua perangkat lunak, materi pemrograman, atau artikel yang diterbitkan oleh Code Farmer Network hanya untuk tujuan pembelajaran dan penelitian; Konten di atas tidak boleh digunakan untuk tujuan komersial atau ilegal, jika tidak, pengguna akan menanggung semua konsekuensi. Informasi di situs ini berasal dari Internet, dan sengketa hak cipta tidak ada hubungannya dengan situs ini. Anda harus sepenuhnya menghapus konten di atas dari komputer Anda dalam waktu 24 jam setelah pengunduhan. Jika Anda menyukai program ini, harap dukung perangkat lunak asli, pembelian pendaftaran, dan dapatkan layanan asli yang lebih baik. Jika ada pelanggaran, silakan hubungi kami melalui email.

Mail To:help@itsvse.com