Artikulo Direktoryo
Ang storage engine ng isang database table ay parang makina ng isang kotse; ang pagpapalit ng makina ay agad na nagbabago sa performance at mga katangian. Maraming tao ang nag-iisip na ang isang database ay para lamang sa pag-iimbak ng data, ngunit kapag sinimulan mo na itong gawin... InnoDB 转成 MyISAMSaka mo lang matutuklasan ang mga nakatagong sikreto sa likod nito.
Bakit may gustong lumipat mula sa InnoDB patungong MyISAM?
Sa maraming sitwasyon, mas mabilis ang MyISAM, lalo na para sa mga read-heavy at write-light na application tulad ng mga log at statistics database.
Ang mekanismo ng pagla-lock nito sa antas ng mesa ay talagang tumatakbo nang maayos sa ilalim ng mababang sabay-sabay na paggamit.
Bukod dito, mas madaling maunawaan ang pag-iimbak ng file ng MyISAM; isa .MYD Iimbak ang datos, isa .MYI Ang pag-iimbak ng mga index, paglipat, at pag-backup ay pawang napaka-maginhawa.
Gayunpaman, ang suporta sa transaksyon at foreign key ng InnoDB ay halos isang pangangailangan sa mga kumplikadong senaryo ng negosyo.
Samakatuwid, dapat mong alamin kung talagang kailangan ng iyong negosyo ang mga feature na ito bago gawin ang paglipat.
Pangunahing utos: ALTER TABLE
Para i-convert ang isang talahanayan mula sa InnoDB patungong MyISAM, isang linya lang ng code ang kailangan mo:
ALTER TABLE `你的表名` ENGINE = MyISAM;
Pagkatapos makumpleto ang pagpapatupad, ang storage engine ng talahanayan ay ililipat.
Hindi ba't diretso lang 'yan?
Pag-convert nang maramihan: Awtomatikong pagbuo ng script
Kung mayroon kang dose-dosenang o kahit daan-daang talahanayan, ang manu-manong pagbabago sa mga ito ay tiyak na hindi praktikal.
Sa puntong ito, maaaring gamitin ang isang query upang awtomatikong makabuo ng mga batch conversion statement:
SELECT CONCAT('ALTER TABLE `', table_name, '` ENGINE = MyISAM;')
FROM information_schema.tables
WHERE table_schema = '你的数据库名' AND engine = 'InnoDB';
Pagkatapos tumakbo, maglalabas ito ng isang grupo ng... ALTER TABLE ... Pahayag.
Kopyahin ang mga pahayag na ito at isagawa ang lahat nang sabay-sabay upang makumpleto ang batch conversion nang sabay-sabay.
Ito ang tinatawag na "automated batch conversion".
Pagtatasa ng panganib bago ang conversion

Mga limitasyon sa dayuhang susi
Sinusuportahan ng InnoDB ang mga foreign key, habang hindi sinusuportahan ng MyISAM ang mga ito.
Kapag na-convert na, ang mga foreign key constraints ay direktang itatapon.
Kung ang iyong negosyo ay umaasa sa magkakasunod na pagbura o pag-update, ang lohika ay tuluyang mabibigo pagkatapos ng conversion.
Suporta sa transaksyon
May mga transaksyon ang InnoDB at sinusuportahan ang mga ito. COMMIT At ROLLBACK.
Walang mga transaksyon ang MyISAM, mga lock lamang sa antas ng mesa.
Pagkatapos ng conversion, lahat ng code na may kaugnayan sa transaksyon ay magiging invalid, at imposibleng i-rollback kung sakaling magkaroon ng exception.
Pagganap ng sabay-sabay na pera
Gumagamit ang InnoDB ng row-level locking, habang ang MyISAM ay gumagamit ng table-level locking.
Sa mga sitwasyong may mataas na sabay-sabay na paggamit, madalas na nilo-lock ng MyISAM ang mga talahanayan, na humahantong sa mga bottleneck sa pagganap.
Mga tampok ng indeks
在 MySQL Bago ang bersyon 5.6, ang MyISAM ay may sarili nang full-text index.
但在 MySQL Sinusuportahan na ang full-text indexing sa mga bersyon 5.6 at 10+ ng MariaDB at InnoDB.
Samakatuwid, maliban kung gumagamit ka ng mas lumang bersyon, hindi mo na kailangang lumipat sa MyISAM para sa full-text indexing.
Proseso ng Pinakamahusay na Pagsasanay
Pag-backup ng datos Bago mag-convert, siguraduhing i-export ito.
.sqlAng mga file ay nakaimbak upang matiyak na maaari itong maibalik anumang oras.Istruktura ng Checklist Gamitin ang sumusunod na utos upang suriin kung mayroong isang foreign key:
SHOW CREATE TABLE `你的表名`;Magsagawa ng conversion paggamit
ALTER TABLEBilang kahalili, maaaring gamitin ang mga batch script upang makumpleto ang conversion.Suriin ang kalagayan ng kalusugan Pagkatapos makumpleto ang conversion, patakbuhin ang:
CHECK TABLE `你的表名`; OPTIMIZE TABLE `你的表名`;Kinukumpirma nito na ang talahanayan ay gumagana nang tama at naglalabas ng mga fragment.
Paraan ng pagbawi mula sa kabaligtaran
Kung may maobserbahang pagbaba ng performance o mga isyu sa business logic pagkatapos ng conversion, maaari kang bumalik sa InnoDB anumang oras:
ALTER TABLE `你的表名` ENGINE = InnoDB;
Ito ang tinatawag na "reversible operation," na nagbibigay sa iyo ng daan palabas.
Mga nabanggit na awtoridad na pananaw
Ayon kay Opisyal na Dokumentasyon ng MySQL Paliwanag:
"Konstraksyon ng dayuhang susi"aiAng mga nts ay sinusuportahan lamang ng InnoDB. Kung iko-convert mo ang isang table sa MyISAM, lahat ng foreign keys ay hindi papansinin.
——Manwal ng Sanggunian ng MySQL, Kabanata 14.6.6 Mga Limitasyon sa Dayuhang Susi
Malinaw na sinasabi sa atin ng pahayag na ito na ang mga foreign key ay ganap na hindi wasto sa MyISAM.
at Opisyal na Dokumentasyon ng MariaDB Binigyang-diin din na:
"Hindi sinusuportahan ng MyISAM ang mga transaksyon. Ang mga aplikasyong umaasa sa integridad ng transaksyon ay hindi dapat gumamit ng MyISAM."
——MariaDB Knowledge Base, Mga Storage Engine
Kaya nga kailangan mong mag-isip nang mabuti bago ka lumipat.
Ang Aking Pananaw at Konklusyon
Ang pag-convert ng InnoDB sa MyISAM ay parang pagpapalit ng makina ng isang luxury car ng makina ng trak.
Maaari itong tumakbo, ngunit tumatakbo ito sa ibang paraan.
Kung ang iyong negosyo ay nagsasangkot ng magaan na mga query sa istatistika, maaaring mas angkop ang bilis at pagiging simple ng MyISAM.
Gayunpaman, kung ang iyong sistema ay umaasa sa mga transaksyon at mga dayuhang susi, ang padalus-dalos na pag-convert sa mga ito ay parang pag-alis ng airbag.
Samakatuwid, ang tunay na karunungan ay wala sa bulag na paghahangad ng bilis, kundi sa pagbabalanse ng katatagan at pagganap.
Ang pagpili ng database ang nagtatakda ng kaluluwa ng sistema.
Ang pagiging dalubhasa sa mga kasanayan sa paglipat ng mga storage engine ay hindi lamang isang pagpapakita ng kakayahang teknikal, kundi isang pagpapahusay din ng pag-iisip sa arkitektura.
Kung isinasaalang-alang mo ang bulk conversion, mangyaring magsagawa muna ng komprehensibong pagtatasa ng panganib.
Patakbuhin ang test environment nang isang beses upang gayahin ang mga totoong senaryo ng negosyo.
Matapos kumpirmahin na tama ang lahat, isagawa ang utos sa kapaligiran ng produksyon.
Ang mga database ay hindi laruan; ang mga ito ang puso ng datos ng negosyo.
At ikaw ang kumokontrol sa ritmo ng iyong puso.
Hope Chen Weiliang Blog ( https://www.chenweiliang.com/ Ang artikulong "Paano I-Batch Convert ang mga InnoDB Tables patungong MyISAM Tables sa MySQL/MariaDB Databases?" na ibinahagi rito ay maaaring makatulong sa iyo.
Maligayang pagdating upang ibahagi ang link ng artikulong ito:https://www.chenweiliang.com/cwl-34157.html
