Kutipan berikut keluar dari buku " MySQL Kinerja Tinggi, Edisi Kedua ".
Ini adalah buku yang sangat bagus dan saya akan merekomendasikan ini kepada siapa pun.
Jawaban singkatnya adalah:
Dengan ukuran dan kondisi meja Anda, apa pun metode yang Anda pilih, saya pikir Anda berpotensi menunggu lama.
Konversi Tabel
Ada beberapa cara untuk mengubah tabel dari satu mesin penyimpanan ke yang lain, masing-masing dengan kelebihan dan kekurangan.
ALTER TABEL
mysql> ALTER TABLE mytable ENGINE = Falcon;
Sintaks ini bekerja untuk semua mesin penyimpanan, tetapi ada masalah: ini bisa memakan banyak waktu. MySQL akan melakukan salinan baris demi baris dari tabel lama Anda ke tabel baru. Selama waktu itu, Anda mungkin akan menggunakan semua kapasitas I / O disk server, dan tabel aslinya akan dikunci-baca saat konversi berjalan.
Buang dan impor
Untuk mendapatkan kontrol lebih besar atas proses konversi, Anda dapat memilih untuk terlebih dahulu membuang tabel ke file teks menggunakan utilitas mysqldump. Setelah membuang tabel, Anda cukup mengedit file dump untuk menyesuaikan pernyataan CREATE TABLE yang dikandungnya. Pastikan untuk mengubah nama tabel serta tipenya, karena Anda tidak dapat memiliki dua tabel dengan nama yang sama dalam database yang sama bahkan jika mereka dari tipe yang berbeda-dan mysqldump secara default untuk menulis perintah DROP TABLE sebelum CREATE TABLE , jadi Anda mungkin kehilangan data Anda jika Anda tidak hati-hati!
BUAT dan PILIH
Teknik konversi ketiga adalah kompromi antara kecepatan mekanisme pertama dan keamanan yang kedua. Daripada membuang seluruh tabel atau mengonversinya sekaligus, buat tabel baru dan gunakan sintaks MySQL SELECT ... SELECT untuk mengisinya, sebagai berikut:
mysql> CREATE TABLE innodb_table LIKE myisam_table;
mysql> ALTER TABLE innodb_table ENGINE=InnoDB;
mysql> INSERT INTO innodb_table SELECT * FROM myisam_table;
Itu bekerja dengan baik jika Anda tidak memiliki banyak data, tetapi jika Anda melakukannya, sering kali lebih efisien untuk mengisi tabel secara bertahap, melakukan transaksi antara masing-masing potongan sehingga pembatalan log tidak tumbuh besar. Dengan asumsi bahwa id adalah kunci utama, jalankan kueri ini berulang kali (menggunakan nilai x dan y yang lebih besar setiap kali) hingga Anda menyalin semua data ke tabel baru:
mysql> START TRANSACTION;
mysql> INSERT INTO innodb_table SELECT * FROM myisam_table
-> WHERE id BETWEEN x AND y;
mysql> COMMIT;
Setelah melakukannya, Anda akan dibiarkan dengan tabel asli, yang bisa Anda jatuhkan begitu selesai, dan tabel baru, yang sekarang sudah terisi penuh. Berhati-hatilah untuk mengunci tabel asli jika perlu untuk mencegah mendapatkan salinan data yang tidak konsisten!