Apa perbedaan utama antara InnoDB dan MyISAM?

245

Apa perbedaan utama antara InnoDB dan MyISAM?

ilhan
sumber
23
Jika Anda menginginkan mesin basis data, gunakan InnoDB. Anda tidak dapat membandingkan keduanya .
Jeremy Stein
Sementara banyak dari jawaban di bawah ini benar, mereka tidak mendidih dengan jelas, IMHO. Situs ini melakukannya, dan poin utama: InnoDB adalah penguncian tingkat-baris, MyISAM adalah penguncian tingkat-tabel. Ini berarti, secara umum, MyISAM akan lebih baik untuk OLAP (analitik, kebanyakan membaca) dan InnoDB akan lebih baik untuk OLTP (transaksi, kebanyakan menulis, atau setidaknya banyak menulis).
Mike Williamson

Jawaban:

159

Perbedaan utama pertama yang saya lihat adalah InnoDB mengimplementasikan kunci tingkat baris sementara MyISAM hanya dapat melakukan kunci tingkat meja. Anda akan menemukan pemulihan kerusakan yang lebih baik di InnoDB. Namun, itu tidak memiliki FULLTEXTindeks pencarian hingga v5.6, seperti halnya MyISAM. InnoDB juga mengimplementasikan transaksi, kunci asing dan batasan hubungan sementara MyISAM tidak.

Daftar ini bisa sedikit lebih jauh. Namun, mereka berdua memiliki kelebihan unik dalam mendukung dan merugikan satu sama lain. Masing-masing lebih cocok dalam beberapa skenario daripada yang lain.

Jadi untuk meringkas ( TL; DR ):

  • InnoDB memiliki penguncian level-baris, MyISAM hanya dapat melakukan penguncian level-tabel penuh.
  • InnoDB memiliki pemulihan kerusakan yang lebih baik.
  • MyISAM memiliki FULLTEXTindeks pencarian, InnoDB tidak sampai MySQL 5.6 (Feb 2013).
  • InnoDB mengimplementasikan transaksi, kunci asing dan batasan hubungan, MyISAM tidak.
poelinca
sumber
Tuan yang terhormat, jadi pada akhirnya apa yang harus digunakan? MyISAM atau InnoDB? Saya benar-benar bingung ... situs web saya menggunakan mysql dan saya harus memutuskan ini.
sqlchild
3
tergantung pada aplikasinya, tuliskan daftar dengan fitur yang Anda perlukan (mis. pencarian teks lengkap, kunci asing ...) dan cobalah untuk memutuskan satu (coba untuk menilai masing-masing fitur dan kemudian menghitung skor). Anda tidak akan dapat memiliki semuanya tetapi terserah pada Anda untuk memutuskan fitur penyihir yang paling dibutuhkan.
poelinca
2
Saya mengedit posnya untuk klarifikasi.
Mathias Lykkegaard Lorenzen
1
@MathiasLykkegaardLorenzen terima kasih, itulah salah satu alasan kami menyukai
stackexchange
pada version 5.6.4InnoDB mendukung FULLTEXTpencarian. dev.mysql.com/doc/refman/5.6/en/fulltext-restrictions.html
daydreamer
85

Perbedaan utama lainnya yang belum disebutkan adalah bagaimana caching untuk setiap mesin penyimpanan dilakukan.

MYISAM

Mekanisme utama yang digunakan adalah cache kunci. Hanya cache halaman indeks dari file .MYI. Untuk mengukur cache kunci Anda, jalankan kueri berikut:

SELECT CONCAT(ROUND(KBS/POWER(1024,
IF(PowerOf1024<0,0,IF(PowerOf1024>3,0,PowerOf1024)))+0.4999),
SUBSTR(' KMG',IF(PowerOf1024<0,0,
IF(PowerOf1024>3,0,PowerOf1024))+1,1))
recommended_key_buffer_size FROM
(SELECT LEAST(POWER(2,32),KBS1) KBS
FROM (SELECT SUM(index_length) KBS1
FROM information_schema.tables
WHERE engine='MyISAM' AND
table_schema NOT IN ('information_schema','mysql')) AA ) A,
(SELECT 2 PowerOf1024) B;

Ini akan memberikan Pengaturan yang Disarankan untuk Cache Kunci MyISAM ( key_buffer_size ) yang diberikan pada kumpulan data Anda saat ini ( kueri akan membatasi rekomendasi pada 4G (4096M). Untuk OS 32-bit, batasnya 4GB. Untuk 64-bit, 8GB.

InnoDB

Mekanisme utama yang digunakan adalah Buffer Pool InnoDB. Itu cache data dan halaman indeks dari tabel InnoDB diakses. Untuk mengukur Kelompok Penyangga InnoDB Anda, jalankan kueri berikut:

SELECT CONCAT(ROUND(KBS/POWER(1024,
IF(PowerOf1024<0,0,IF(PowerOf1024>3,0,PowerOf1024)))+0.49999),
SUBSTR(' KMG',IF(PowerOf1024<0,0,
IF(PowerOf1024>3,0,PowerOf1024))+1,1)) recommended_innodb_buffer_pool_size
FROM (SELECT SUM(data_length+index_length) KBS FROM information_schema.tables
WHERE engine='InnoDB') A,
(SELECT 2 PowerOf1024) B;

Ini akan memberikan Pengaturan yang Dianjurkan untuk ukuran Pool Buffer InnoDB ( innodb_buffer_pool_size ) mengingat kumpulan data Anda saat ini.

Jangan lupa untuk mengubah ukuran File Log InnoDB (ib_logfile0 dan ib_logfile1). Kode Sumber MySQL menempatkan batas ukuran gabungan dari semua File Log InnoDB harus <4G (4096M). Demi kesederhanaan, hanya dengan dua file log, berikut adalah cara Anda dapat mengukurnya:

  • Langkah 1) Tambahkan innodb_log_file_size = NNN ke /etc/my.cnf (NNN harus 25% dari innodb_buffer_pool_size atau 2047M, yang mana lebih kecil)
  • Langkah 2) service mysql stop
  • Langkah 3) rm /var/log/mysql/ib_logfile[01]
  • Langkah 4) service mysql start(ib_logfile0 dan ib_logfile1 diciptakan kembali)

CAVEAT

Di Akhir kedua kueri adalah Kueri Inline (SELECT 2 PowerOf1024)B

  • (SELECT 0 PowerOf1024) memberikan Pengaturan dalam Bytes
  • (SELECT 1 PowerOf1024) memberikan Pengaturan dalam Kilobyte
  • (SELECT 2 PowerOf1024) memberikan Pengaturan dalam Megabita
  • (SELECT 3 PowerOf1024) memberikan Pengaturan dalam Gigabytes
  • Tidak ada kekuatan kurang dari 0 atau lebih dari 3 yang diterima

EPILOG

Tidak ada pengganti untuk akal sehat. Jika Anda memiliki memori terbatas, campuran mesin penyimpanan, atau kombinasinya, Anda harus menyesuaikan skenario yang berbeda.

  • Jika Anda memiliki RAM 2GB dan InnoDB 16GB, alokasikan 512M sebagai innodb_buffer_pool.
  • Jika Anda memiliki RAM 2GB dan Indeks MyISAM 4GB, alokasikan 512M sebagai key_buffer_size.
  • Jika Anda memiliki 2GB RAM dan 4GB Indeks MyISAM dan 16GB InnoDB, alokasikan 512M sebagai key_buffer_size dan 512M sebagai innodb_buffer_pool_size.

Skenario yang mungkin tidak terbatas !!!

Ingat, apa pun yang Anda alokasikan, sisakan RAM yang cukup untuk Koneksi DB dan Sistem Operasi.

RolandoMySQLDBA
sumber
Itu adalah formula yang buruk!
Rick James
(oops - terus lupa tidak dapat memiliki paragraf) ... Saya akan menambahkan "jawaban".
Rick James
Rumus Rolando untuk ukuran cache tidak praktis. - Kekuatan 2 tidak diperlukan. - 4GB pada OS 32-bit tidak mungkin - Dll. Berikut ini rundown saya tentang apa yang mengaturnya: mysql.rjweb.org/doc.php/memory (Ini membahas berbagai pengaturan lain yang mempengaruhi penggunaan memori.)
Rick James
2
@ Rick: Kekuatan 2 dimaksudkan untuk menampilkan jawaban dalam unit yang berbeda. Melakukan (PILIH 2 PowerOfTwo) Mengatur Tampilan Jawaban dalam MB. Melakukan (PILIH 3 PowerOfTwo) Mengatur Tampilan dalam GB. (PILIH 1 PowerOfTwo) Menampilkan dalam KB. (PILIH 0 PowerOfTwo) Menampilkan dalam Bytes. Itulah yang dilakukan (SELECT 2 PowerOfTwo). Jadi perlu DISPLAY ONLY, tidak memaksakan nilai yang diasumsikan dalam arsitektur.
RolandoMySQLDBA
2
@ Rick: Anda tahu apa? Saya benar-benar akan memberi Anda +1 karena dua alasan yang sangat besar. 1) URL Anda mengonfirmasi jawaban saya benar karena 4GB adalah angka terbesar yang diberikan ke key_buffer_size. 2) Jawaban Anda, dengan URL Anda, masuk akal untuk mesin dengan memori sangat rendah. Saya akan memberikan kredit di mana kredit jatuh tempo.
RolandoMySQLDBA
60

InnoDB menawarkan:

  • Transaksi ASAM
  • penguncian tingkat baris
  • batasan kunci asing
  • pemulihan crash otomatis
  • kompresi tabel (baca / tulis)
  • tipe data spasial (tidak ada indeks spasial)

Di InnoDB, semua data berturut-turut kecuali TEXT dan BLOB dapat menempati paling banyak 8.000 byte. Pengindeksan teks lengkap tidak tersedia di InnoDB hingga MySQL 5.6 (Feb 2013). Di InnoDB, COUNT(*)s (ketika WHERE,, GROUP BYatau JOINtidak digunakan) mengeksekusi lebih lambat daripada di MyISAM karena jumlah baris tidak disimpan secara internal. InnoDB menyimpan data dan indeks dalam satu file. InnoDB menggunakan kumpulan buffer untuk menyimpan data dan indeks.

MyISAM menawarkan:

  • cepat COUNT(*)s (ketika WHERE, GROUP BYatau JOINtidak digunakan)
  • pengindeksan teks lengkap (pembaruan: didukung di InnoDB dari MySQL 5.6)
  • jejak disk yang lebih kecil
  • kompresi tabel sangat tinggi (hanya baca)
  • tipe dan indeks data spasial (R-tree) (pembaruan: didukung di InnoDB dari MySQL 5.7)

MyISAM memiliki penguncian level-tabel, tetapi tidak ada penguncian level-baris. Tidak ada transaksi. Tidak ada pemulihan kerusakan otomatis, tetapi memang menawarkan fungsionalitas tabel perbaikan. Tidak ada batasan kunci asing. Tabel MyISAM umumnya lebih kompak dalam ukuran pada disk jika dibandingkan dengan tabel InnoDB. Tabel MyISAM dapat semakin dikurangi ukurannya dengan mengompresi dengan myisampack jika diperlukan, tetapi menjadi read-only. MyISAM menyimpan indeks dalam satu file dan data di file lain. MyISAM menggunakan buffer kunci untuk indeks caching dan membiarkan manajemen caching data ke sistem operasi.

Secara keseluruhan saya akan merekomendasikan InnoDB untuk sebagian besar keperluan dan MyISAM hanya untuk penggunaan khusus. InnoDB sekarang menjadi mesin default di versi MySQL baru.

dabest1
sumber
5
Saya membaca jawaban Anda dan membandingkannya dengan yang lain di sini. Anda adalah satu-satunya yang menyebutkan Gumpalan. Mereka biasanya diterima begitu saja. Anda juga satu-satunya yang menyebutkan myisampack, salah satu pahlawan tanpa tanda jasa dari tabel MyISAM yang dapat dibaca dengan cepat. Anda adalah +1 hari ini !!!
RolandoMySQLDBA
2
Contoh akan menjadi tabel baca-saja yang dikompres di mana Anda memiliki pembaruan yang jarang terjadi dengan sepenuhnya mengganti tabel.
dabest1
30

Satu hal lagi: Anda dapat membuat cadangan tabel InnoDB hanya dengan mengambil snapshot dari sistem file. Mencadangkan MyISAM membutuhkan penggunaan mysqldump dan tidak dijamin konsisten (misalnya jika Anda memasukkan ke tabel induk dan tabel anak, Anda mungkin hanya menemukan baris tabel anak dalam cadangan Anda).

Pada dasarnya, jika Anda memiliki salinan data lain dan hanya menyimpannya di MySQL misalnya untuk memungkinkan cara standar mengaksesnya dari situs web PHP, maka MyISAM baik-baik saja (yaitu lebih baik daripada file CSV datar atau file log untuk kueri dan akses bersamaan). Jika database adalah "salinan master" sebenarnya dari data, jika Anda melakukan INSERTdan UPDATEmenggunakan data nyata dari pengguna, maka bodoh menggunakan apa pun selain InnoDB, pada skala apa pun, MyISAM tidak dapat diandalkan dan sulit dikelola, Anda akan melakukan myisamchkseparuh waktu, meniadakan setiap kenaikan kinerja ...

(Pengalaman pribadi saya: DB 2 terabyte di MyISAM).

Gayus
sumber
29

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 yang 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 melakukan perubahan, ia 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.

d4nyll
sumber
1
Terima kasih, ringkasan yang sangat informatif dan jelas.
informatik01
18

Dalam pengalaman saya, perbedaan paling signifikan adalah cara masing-masing mesin menangani penguncian. InnoDB menggunakan penguncian baris sementara MyISAM menggunakan penguncian tabel. Sebagai aturan praktis, saya menggunakan InnoDB untuk menulis tabel berat dan MyISAM untuk membaca tabel berat.

Perbedaan penting lainnya termasuk:

  1. InnoDB mendukung transaksi dan kunci asing. MyISAM tidak.
  2. MyISAM menggunakan pengindeksan teks lengkap.
  3. MyISAM melakukan pekerjaan yang buruk dalam menegakkan integritas data.
Bsoist
sumber
Kedaluwarsa - InnoDB sekarang memiliki FULLTEXTdan SPATIAL. InnoDB baik untuk kedua beban read dan write-berat.
Rick James
8

Saya cenderung melihat MyISAM sebagai pilihan tabel 'default' untuk MySQL, jadi saya akan menunjukkan perbedaan untuk sebagian besar pengguna InnoDB

  • Penguncian tingkat baris
  • Penegakan kunci asing
  • Dukungan transaksi
  • Kinerja sangat baik pada sistem penggunaan tinggi
Patrick
sumber
5
kecuali rilis MySQL terbaru tidak lagi menggunakan MyISAM sebagai mesin default. Di 5,5 mereka mengubah default ke InnoDB :). Dan saya akan tidak setuju dengan generalisasi bahwa InnoDB secara umum hanya mendapat 'kinerja hit'. Tabel InnoDB yang dirancang dengan baik dengan pengindeksan yang tepat dan pengaturan memori yang dikonfigurasi dengan baik dapat membuat tabel InnoDB berkinerja sama halnya dengan skema yang sama di MyISAM
TechieGurl
3
Dalam banyak situasi "penggunaan tinggi" InnoDB benar-benar berkinerja lebih baik daripada MyISAM. MyISAM adalah alat khusus untuk masalah tertentu, sementara InnoDB akan melayani Anda dengan lebih baik di sebagian besar situasi (karenanya mengapa tim MySQL menjadikannya mesin default). Itu karena MyISAM adalah satu-satunya mesin untuk waktu yang lama sehingga komunitas MySQL tumbuh menjadi kebiasaan menggunakan MyISAM secara default, bahkan setelah InnoDB jatuh tempo.
Nick Chammas
2
Pencarian FULLTEXT untuk InnoDB ditambahkan sebagian melalui siklus pengembangan MySQL 5.6. URL yang dikutip sekarang juga mencakup InnoDB.
Max Webster
5

MYISAM

MYISAM menyediakan penguncian level tabel, pencarian FULLTEXT. MYISAM memiliki kolom AUTO_INCREMENTED paling fleksibel yang menangani semua mesin penyimpanan. MYISAM tidak mendukung transaksi.

INNODB

INNODB adalah mesin penyimpanan transaksi yang aman. INNODB memiliki kemampuan komit, kembalikan, dan pemulihan crash. INNODB mendukung integritas referensi kunci asing.

Anto
sumber
5

Termasuk perubahan MySQL 5.6

MESIN PENYIMPANAN INNODB:

  • Ini memberikan kepatuhan ACID (atomisitas, konsistensi, isolasi, daya tahan) penuh. Multi-versi digunakan untuk mengisolasi transaksi dari satu sama lain.
  • InnoDB menyediakan pemulihan otomatis setelah crash dari server MySQL atau host tempat server berjalan.
  • InnoDB mendukung kunci asing dan integritas referensial, termasuk penghapusan cascaded dan pembaruan.
  • MySQL 5.6 dibangun di atas platform InnoDB yang sepenuhnya terintegrasi sebagai mesin penyimpanan default
  • Statistik Pengoptimal Persisten : Memberikan peningkatan akurasi statistik indeks InnoDB, dan konsistensi di seluruh restart MySQL.
  • Memangkas cache tabel InnoDB: Untuk memudahkan beban memori pada sistem dengan sejumlah besar tabel, InnoDB sekarang membebaskan memori yang terkait dengan tabel yang dibuka. Algoritma LRU memilih tabel yang telah berjalan paling lama tanpa diakses.
  • Mendukung pencarian teks lengkap: Jenis indeks khusus, indeks FULLTEXT, membantu InnoDB menangani kueri dan operasi DML yang melibatkan kolom berbasis teks dan kata-kata yang dikandungnya. Indeks ini secara fisik direpresentasikan sebagai seluruh tabel InnoDB.
  • InnoDB tampaknya jauh lebih cepat pada Pencarian Teks Lengkap daripada MyISAM

Jadi, tidak ada gunanya menggunakan MyISAMEngine jika Anda sudah ditingkatkan ke 5.6, jika tidak maka jangan menunggu untuk upgrade ke MySQL 5.6.

Kinerja InnoDB VS MyISAM menggunakan MySQL 5.6

Mahesh Patil
sumber
2

MyISAM

MyISAM adalah mesin penyimpanan untuk MySQL. Sebelum MySQL 5.5 itu adalah mesin penyimpanan default untuk MySQL. Ini didasarkan pada mesin penyimpanan ISAM yang lebih lama. MyISAM dioptimalkan untuk lingkungan dengan operasi baca yang berat, dan sedikit penulisan, atau tidak sama sekali. Alasan MyISAM memungkinkan untuk membaca cepat adalah struktur indeksnya: setiap entri menunjuk ke catatan dalam file data, dan penunjuk diimbangi dari awal file. Dengan cara ini catatan dapat dengan cepat dibaca, terutama ketika formatnya TETAP. Dengan demikian, baris memiliki panjang konstan. Area tipikal di mana seseorang dapat memilih MyISAM adalah data warehouse, karena melibatkan pertanyaan pada tabel yang sangat besar, dan pembaruan tabel tersebut dilakukan ketika database tidak digunakan (biasanya pada malam hari). Sisipan juga mudah, karena baris baru ditambahkan ke akhir file data. Namun, hapus dan perbarui operasi yang lebih bermasalah: penghapusan harus meninggalkan ruang kosong, atau offset baris akan berubah; hal yang sama berlaku untuk pembaruan, karena panjang baris menjadi lebih pendek; jika pembaruan membuat baris lebih panjang, baris terfragmentasi. Untuk mendefrag baris dan mengklaim ruang kosong, fileOPTIMIZE TABLEperintah harus dijalankan. Karena mekanisme yang sederhana ini, biasanya statistik indeks MyISAM cukup akurat. Kelemahan utama MyISAM lainnya adalah tidak adanya dukungan transaksi dan kunci asing.

InnoDB

InnoDB adalah mesin penyimpanan untuk MySQL. MySQL 5.5 dan yang lebih baru menggunakannya secara default. Ini memberikan fitur transaksi standar yang sesuai dengan ACID, bersama dengan dukungan kunci asing (Declarative Referential Integrity). Ini mengimplementasikan transaksi SQL dan XA, tablespace, FULLTEXTindeks, dan operasi spasial mengikuti standar OpenGIS. Ini dimasukkan sebagai standar dalam sebagian besar binari yang didistribusikan oleh MySQL AB, dengan pengecualian beberapa versi OEM. Perangkat lunak ini dilisensikan ganda oleh Oracle Corporation; itu didistribusikan di bawah Lisensi Publik Umum GNU, tetapi juga dapat dilisensikan kepada pihak yang ingin menggabungkan InnoDB dalam perangkat lunak berpemilik.

Garpu

MariaDB memiliki mesin penyimpanan yang disebut Aria, yang digambarkan sebagai "alternatif aman untuk MyISAM". MariaDB dan Percona Server menggunakan garpu InnoDB yang disebut XtraDB secara default. XtraDB dikelola oleh Percona. Perubahan Oracle InnoDB secara teratur diimpor ke XtraDB, dan beberapa perbaikan bug dan fitur tambahan ditambahkan.

wogsland
sumber