InnoDB ir MyISAM yra vieni populiariausių MySQL variklių. Kiekvienas iš jų turi savo privalumų ir trūkumų – pamėginsime juos peržvelgti.
MyISAM buvo MySQL variklis, kuris buvo naudojamas iki MySQL 5.5 versijos, kuri buvo išleista 2009 m. gruodžio mėnesį. MyISAM yra pagrįsta senu ISAM saugojimo varikliu, kuris buvo naudojamas iki MySQL 3.23 – nuo šios MySQL versijos ISAM pakeitė MyISAM. MyISAM variklis buvo išleistas ankščiau nei InnoDB.
MyISAM variklio funkcijos yra šios:
BLOB
ir TEXT
stulpeliuose;InnoDB yra bendrosios paskirties MySQL duomenų saugojimo variklis ir numatytasis duomenų saugojimo variklis nuo MySQL 5.6. Variklis palaiko su ACID suderinamas operacijų funkcijas, svetimus raktus (angl. “foreign keys”), balansuoja patikimumą ir aukštą našumą bei yra daugumos programuotojų dirbančių su MySQL numylėtinis.
InnoDB variklio funkcijos yra šios:
Darbas su MyISAM nėra labai malonus todėl, nes šis variklis naudoja lentelės lygio užraktus ir neturi trikdžių atstatymo mechanizmo. Be to, InnoDB turi beveik visas funkcijas, kurias turi ir MyISAM:
Užraktai | Taip, lentelių lygio | Taip, įrašų lygio |
Full-text Paieška | Taip | Taip, nuo MySQL 5.6.4 |
Paskutinis Lentelės Atnaujinimas | Taip | Taip, nuo MySQL 5.7 |
Trikdžių Atkūrimas | Ne | Taip |
Indeksų Kardinalumas yra Lentelėse | Taip | Ne |
Bendra nuostata yra tokia – dirbdami su svarbiais duomenimis turėtumėte naudoti InnoDB. Dirbti su MyISAM yra sunkiau (pavyzdžiui, negalima tiesiog nukopijuoti MyISAM lentelių į MySQL serverį, tačiau naudodami InnoDB taip padaryti galite panaudoję užklausą ALTER TABLE ... IMPORT TABLESPACE;
) ir vienintelis scenarijus, kada MyISAM yra greitesnė nei InnoDB yra tada, kai naudojamos COUNT(*) užklausos, nes MyISAM saugo įrašų skaičių lentelės metaduomenyse. Naudojant InnoDB tokios užklausos būtų lėtesnės, nes InnoDB neturi jokio išsaugoto įrašų skaičiaus – šiam varikliui reikia atlikti visos lentelės ar visų indeksų nuskaitymą.
Be to, jei naudosite InnoDB ir MyISAM, abiejų variklių veikimą optimizuoti bus sunku. Šioje lentelėje pateiktas galimų MyISAM parametrų sąrašas:
key_buffer_size | Šis parametras naudojamas tam, kad į cache būtų įrašomi MyISAM lentelių indeksų blokai. |
read_buffer_size | Visos lentelės nuskaitymui naudojamo buferio dydis MyISAM variklyje. |
read_rnd_buffer_size | Įrašai skaitomi per šį buferį tada, kai įrašai skaitomi rūšiuota tvarka atlikus rūšiavimo operacijas. Skaitant iš šio buferio išvengiama paieškų per diską – ORDER BY užklausos našumą galima pagerinti padidinant šio kintamojo vertę. |
bulk_insert_buffer_size | Naudojamas norint padidinti didelių duomenų kiekių importavimo greitį – šio buferio vertė nustatoma tada, kai aptinkamas didelių duomenų kiekių importavimas. Norėdami išjungti šį parametrą, nustatykite reikšmę 0. |
myisam_sort_buffer_size | Šio buferio vertė nustatoma tada, kai MyISAM varikliui reikia atsatyti indeksus. Naudojama tada, kai vykdomos užklausos REPAIR TABLE , OPTIMIZE TABLE , ALTER TABLE ir LOAD DATA INFILE . Skirstomas pagal vykdymo gijas. |
myisam_max_sort_file_size | Maksimalus laikinojo failo, kuris bus naudojamas atkuriant indeksus tada, kai vykdomos REPAIR TABLE , OPTIMIZE TABLE , ALTER TABLE ir LOAD DATA INFILE užklausos. Jei laikinojo failo dydis yra didesnis nei šio parametro vertė, indeksai bus sukurti naudojant raktų talpyklą. |
myisam_repair_threads | Jei lentelė turi daugiau nei vieną indeksą, MyISAM saugojimo variklis naudos nei vieną giją indeksams taisyti rūšiuodamas juos lygiagrečiai. |
myisam_recover | Leidžia automatiškai taisyti ir atkurti MyISAM lenteles, kurios nebuvo tinkamai uždarytos. |
Kita vertus, jei dirbate su InnoDB, žvilgtelėkite į šiuos parametrus:
innodb_data_file_path | Nurodo failą, kuriame bus saugomi iš InnoDB lentelių gauti duomenys. Pagal nutylėjimą duomenys yra saugomi ibdata1 faile, kuris randamas /var/lib/mysql aplanke – ibdata1 yra vienas svarbiausių failų InnoDB infrastruktūroje. |
innodb_buffer_pool_size | Atminties buferis, kurį InnoDB naudoja tam, kad talpintų lentelių duomenis ir jų indeksus. |
innodb_log_file_size | InnoDB log failų dydis. Kuo didesnė ši vertė, tuo mažiau atkūrimo laiko reikės duomenų atstatymui. |
innodb_log_buffer_size | InnoDB naudoja šią vertę rašydama į log failus diske. |
innodb_flush_log_at_trx_commit | Kontroliuoja pusiausvyrą tarp griežto ACID laikymosi vykdant operacijas ir didelio našumo. Pakeitus numatytąją šio parametro vertę gaunamas labai greitas įrašymo greitis, tačiau gali būti prarasta iki vienos sekundės operacijų ir atvirkščiai. |
innodb_lock_wait_timeout | Laikas sekundėmis, kada InnoDB operacija laukia įrašų užrakto prieš pasiduodama. |
innodb_flush_method | Apibrėžia metodą, naudojamą duomenims į InnoDB duomenų failus ir log failus. |
Naudoti kelis duomenų saugojimo variklius tame pačiame MySQL serveryje nėra nieko blogo, tik turėtumėte nepamiršti, kad ir MyISAM ir InnoDB parametrai vaidina pagrindinį vaidmenį kiekvieno iš šių variklių veikime.
Jei planuojate naudoti abu variklius vienu metu, turėsite imtis aktyvių veiksmų, kad įsitikintumėte, jog MyISAM parametrai (key_buffer_size
ir kt.) ir InnoDB parametrai (innodb_buffer_pool_size
ir kt.) nesusiduria.
Vis dėlto, jei abiejų variklių maišymas nėra būtinas, tikriausiai turėtumėte pasirinkti InnoDB – kaip ir minėta ankščiau, darbas su MyISAM yra sunkokas, nes šiame variklyje yra naudojami lentelių lygio užraktai ir jame nėra gedimų atsatymo mechanizmų.
There have been rumors about a data breach targeting Schneider Electric. Did a data breach…
There have been rumors about the Fiskars Group – the company behind Fiskars scissors and…
Russia has fined Google more than two undecillion roubles because Google has refused to pay…
Why does RockYou 2024.txt look like a binary file when you open it up? Find…
Duolicious is a dating app that connects people who are “chronically online.” Did the Duolicious…
This blog will tell you what RockYou 2024 is, how RockYou 2024.txt came to be,…