Direktori Artikel
Enjin storan jadual pangkalan data adalah seperti enjin kereta; menukar enjin serta-merta mengubah prestasi dan ciri-cirinya. Ramai orang berpendapat bahawa pangkalan data hanya untuk menyimpan data, tetapi apabila anda benar-benar mula mengusahakannya... InnoDB 转成 MyISAMHanya dengan itu anda akan menemui rahsia tersembunyi di sebaliknya.
Mengapa seseorang mahu bertukar daripada InnoDB kepada MyISAM?
Dalam banyak senario, MyISAM adalah lebih pantas, terutamanya untuk aplikasi baca berat dan tulis ringan seperti pangkalan data log dan statistik.
Mekanisme penguncian aras meja sebenarnya berjalan dengan sangat lancar di bawah keserentakan yang rendah.
Tambahan pula, storan fail MyISAM lebih intuitif; satu .MYD Simpan data, satu .MYI Menyimpan indeks, berhijrah dan membuat sandaran semuanya sangat mudah.
Walau bagaimanapun, sokongan transaksi dan kunci asing InnoDB hampir menjadi satu keperluan dalam senario perniagaan yang kompleks.
Oleh itu, anda mesti mengetahui sama ada perniagaan anda benar-benar memerlukan ciri-ciri ini sebelum membuat peralihan.
Perintah teras: ALTER TABLE
Untuk menukar satu jadual daripada InnoDB kepada MyISAM, anda hanya memerlukan satu baris kod:
ALTER TABLE `你的表名` ENGINE = MyISAM;
Selepas pelaksanaan selesai, enjin storan jadual akan dihidupkan.
Bukankah itu mudah?
Penukaran kelompok: Penjanaan skrip automatik
Jika anda mempunyai berpuluh-puluh atau beratus-ratus jadual, mengubah suainya secara manual pastinya tidak praktikal.
Pada ketika ini, satu pertanyaan boleh digunakan untuk menjana penyataan penukaran kelompok secara automatik:
SELECT CONCAT('ALTER TABLE `', table_name, '` ENGINE = MyISAM;')
FROM information_schema.tables
WHERE table_schema = '你的数据库名' AND engine = 'InnoDB';
Selepas dijalankan, ia akan mengeluarkan beberapa... ALTER TABLE ... Kenyataan.
Salin pernyataan ini dan laksanakan semuanya sekaligus untuk menyelesaikan penukaran kelompok sekaligus.
Inilah yang dikenali sebagai "penukaran kelompok automatik".
Penilaian risiko sebelum penukaran

Kekangan kunci asing
InnoDB menyokong kunci asing, manakala MyISAM langsung tidak menyokongnya.
Setelah penukaran selesai, kekangan kunci asing akan dibuang.
Jika perniagaan anda bergantung pada pemadaman atau kemas kini bertingkat, logiknya akan gagal sepenuhnya selepas penukaran.
Sokongan transaksi
InnoDB mempunyai transaksi dan menyokongnya. COMMIT 和 ROLLBACK.
MyISAM tidak mempunyai transaksi, hanya kunci peringkat meja.
Selepas penukaran, semua kod berkaitan transaksi akan menjadi tidak sah, dan pengembalian tidak akan mungkin sekiranya berlaku pengecualian.
Prestasi serentak
InnoDB menggunakan penguncian peringkat baris, manakala MyISAM menggunakan penguncian peringkat jadual.
Dalam senario serentak tinggi, MyISAM kerap mengunci jadual, yang membawa kepada kesesakan prestasi.
Ciri-ciri indeks
在 MySQL Sebelum versi 5.6, MyISAM mempunyai indeks teks penuhnya sendiri.
Tetapi di MySQL Pengindeksan teks penuh telah disokong dalam versi 5.6 dan 10+ MariaDB dan InnoDB.
Oleh itu, melainkan anda menggunakan versi lama, tidak perlu beralih kepada MyISAM untuk pengindeksan teks penuh.
Proses Amalan Terbaik
Data sandaran Sebelum menukar, pastikan anda mengeksport.
.sqlFail disimpan untuk memastikan ia boleh dipulihkan pada bila-bila masa.Struktur Senarai Semak Gunakan arahan berikut untuk menyemak sama ada kunci asing wujud:
SHOW CREATE TABLE `你的表名`;Lakukan penukaran 使用
ALTER TABLESecara alternatif, skrip kelompok boleh digunakan untuk melengkapkan penukaran.Semak status kesihatan Selepas penukaran selesai, jalankan:
CHECK TABLE `你的表名`; OPTIMIZE TABLE `你的表名`;Ini mengesahkan bahawa jadual berfungsi dengan betul dan melepaskan serpihan.
Kaedah pemulihan terbalik
Jika penurunan prestasi atau isu logik perniagaan diperhatikan selepas penukaran, anda boleh bertukar kembali kepada InnoDB pada bila-bila masa:
ALTER TABLE `你的表名` ENGINE = InnoDB;
Inilah yang dipanggil "operasi boleh balik", yang memberi anda jalan keluar.
Pandangan berwibawa dipetik
Menurut Dokumentasi Rasmi MySQL Penjelasan:
"Konstr kunci asing"aints hanya disokong oleh InnoDB. Jika anda menukar jadual kepada MyISAM, semua kunci asing akan diabaikan.”
——Manual Rujukan MySQL, Bab 14.6.6 Kekangan Kunci Asing
Pernyataan ini dengan jelas memberitahu kita bahawa kunci asing tidak sah sepenuhnya dalam MyISAM.
dan Dokumentasi Rasmi MariaDB Ia juga ditekankan bahawa:
"MyISAM tidak menyokong transaksi. Aplikasi yang bergantung pada integriti transaksi tidak boleh menggunakan MyISAM."
——Pangkalan Pengetahuan MariaDB, Enjin Storan
Sebab tu kena fikir dua kali sebelum buat perubahan.
Pandangan dan Kesimpulan Saya
Menukar InnoDB kepada MyISAM adalah seperti menggantikan enjin kereta mewah dengan enjin trak.
Ia boleh berjalan, tetapi ia berjalan dengan cara yang sama sekali berbeza.
Jika perniagaan anda melibatkan pertanyaan statistik yang ringan, kelajuan dan kesederhanaan MyISAM mungkin lebih sesuai.
Walau bagaimanapun, jika sistem anda bergantung pada transaksi dan kunci asing, menukarnya secara terburu-buru adalah seperti menanggalkan beg udara.
Oleh itu, kebijaksanaan sejati bukanlah terletak pada mengejar kelajuan secara membuta tuli, tetapi pada mengimbangi kestabilan dan prestasi.
Pemilihan pangkalan data menentukan jiwa sistem.
Menguasai kemahiran menukar enjin storan bukan sahaja merupakan demonstrasi kebolehan teknikal, tetapi juga peningkatan pemikiran seni bina.
Jika anda sedang mempertimbangkan penukaran pukal, sila jalankan penilaian risiko yang komprehensif terlebih dahulu.
Jalankan persekitaran ujian sekali untuk mensimulasikan senario perniagaan sebenar.
Selepas mengesahkan bahawa semuanya betul, laksanakannya dalam persekitaran pengeluaran.
Pangkalan data bukan mainan; ia adalah jantung data perusahaan.
Dan kaulah yang mengawal ritma jantungmu.
Blog Harapan Chen Weiliang ( https://www.chenweiliang.com/ Artikel "Cara Menukar Jadual InnoDB kepada Jadual MyISAM Secara Berkelompok dalam Pangkalan Data MySQL/MariaDB?" yang dikongsikan di sini mungkin berguna untuk anda.
Selamat datang untuk berkongsi pautan artikel ini:https://www.chenweiliang.com/cwl-34157.html
