Sebelum Anda memutuskan MyISAM atau InnoDB, Anda harus memeriksa kedua Mesin Penyimpanan dalam hal bagaimana masing-masing cache
MyISAM
Saat membaca, indeks tabel MyISAM dapat dibaca sekali dari file .MYI dan dimuat di Cache Kunci MyISAM (sesuai ukuran dengan key_buffer_size ). Bagaimana Anda bisa membuat .MYD tabel MyISAM lebih cepat untuk dibaca? Dengan ini:
ALTER TABLE mytable ROW_FORMAT=Fixed;
Saya menulis tentang ini di posting saya sebelumnya
InnoDB
OK, bagaimana dengan InnoDB? Apakah InnoDB melakukan disk I / O untuk permintaan? Anehnya, ya itu benar !! Anda mungkin berpikir saya gila karena mengatakan itu, tetapi itu benar-benar benar, bahkan untuk pertanyaan SELECT . Pada titik ini, Anda mungkin bertanya-tanya "Bagaimana mungkin InnoDB melakukan disk I / O untuk permintaan?"
Semuanya kembali ke InnoDB menjadi Mesin Penyimpanan Transaksional ACID -complaint. Agar InnoDB menjadi Transaksional, ia harus mendukung I
in ACID
, yaitu Isolasi. Teknik untuk menjaga isolasi untuk transaksi dilakukan melalui MVCC, Multiversion Concurrency Control . Secara sederhana, InnoDB mencatat data seperti apa sebelum transaksi mencoba mengubahnya. Di mana itu direkam? Dalam file tablespace sistem, lebih dikenal sebagai ibdata1. Yang membutuhkan disk I / O .
PERBANDINGAN
Karena InnoDB dan MyISAM melakukan disk I / O, faktor acak apa yang menentukan siapa yang lebih cepat?
- Ukuran Kolom
- Format kolom
- Set Karakter
- Rentang Nilai Numerik (membutuhkan INT yang cukup besar)
- Baris Sedang Dipisah Melintasi Blok (Row Chaining)
- Fragmentasi data yang disebabkan oleh
DELETEs
danUPDATEs
- Ukuran Kunci Utama (InnoDB memiliki Indeks Berkelompok, membutuhkan dua pencarian kunci)
- Ukuran Entri Indeks
- daftar berjalan ...
EPILOG
Dengan demikian, dalam lingkungan yang banyak dibaca, dimungkinkan untuk tabel MyISAM dengan Format Baris Tetap untuk mengungguli InnoDB membaca dari Pool Buffer InnoDB jika ada cukup data yang ditulis ke dalam undo log yang terkandung dalam ibdata1 untuk mendukung perilaku transaksional dikenakan pada data InnoDB. Rencanakan tipe data, kueri, dan mesin penyimpanan Anda dengan saksama. Setelah data tumbuh, mungkin akan sangat sulit untuk memindahkan data.
Ngomong-ngomong, saya menulis sesuatu seperti ini 5 hari yang lalu: Bagaimana cara menetapkan batas memori untuk mySQL?