Runājot par MySQL, būtu grūti saprast MyISAM un InnoDB, kas ir divi no pazīstamākajiem un plašāk izmantotajiem MySQL krātuves dzinējiem. Šodien es runāšu ar jums par atšķirību starp MyISAM un InnoDB MySQL ...
Kas ir MyISAM?
MyISAM ir noklusējuma krātuves dzinējs MySQL relāciju datu bāzes pārvaldības sistēmai (pirms 5.5)。 Šī MySQL tabulas krātuves struktūra paplašina daudzas noderīgas funkcijas no vecā ISAM koda. Jaunajā MySQL versijā InnoDB dzinējs plaši aizstāj MyISAM, pateicoties tā priekšrocībām darījumu, atsauces integritātes un augstākas vienlaicīguma ziņā. Katra MyISAM tabula atbilst trim failiem cietajā diskā. Visiem trim failiem ir vienāds faila nosaukums, bet tiem ir atšķirīgi paplašinājumi, lai norādītu to tipa mērķi: .frm failā ir tabulas definīcija, bet šis fails nav daļa no MyISAM programmas, bet gan daļa no servera; .MYD glabā tabulas datus; .MYI ir tabulas indeksa fails.
Kas ir InnoDB?
InnoDB ir vēl viens MySQL atmiņas dzinējs, un MySQL AB izlaistā standarta jaunā versija ir iekļauta visās binārajās instalācijas pakotnēs.5.5 un turpmāk kā noklusējuma krātuves programma。 Tās priekšrocības salīdzinājumā ar citiem krātuves dzinējiem ir atbalsts ar ACID saderīgiem darījumiem (līdzīgi PostgreSQL) un parametru integritāte (t.i., atbalsts ārējām atslēgām).
Oracle Corporation iegādājās Innobase 2005. gada oktobrī. Innobase izmanto dubultās autentifikācijas autorizāciju. Tas tiek izplatīts, izmantojot GNU, un ļauj arī citām grupām, kas vēlas iekļaut InnoDB komerciālajā programmatūrā, iegūt licenci.
Populārākie krātuves dzinēji ir MyISAM un InnoDB. Galvenās atšķirības starp MyISAM un InnoDB ir veiktspēja un darījumu kontrole. MyISAM ir paplašināta agrīnās ISAM (indeksētās secīgās piekļuves metodes, ISAM vairs netiek atbalstīta pēc MySQL 5.0) ieviešana, ISAM ir paredzēta, lai risinātu situācijas, kad lasīšanas frekvence ir daudz lielāka par rakstīšanas frekvenci, tāpēc ISAM un vēlāk MyISAM neņem vērā lietu atbalstu, izslēdz TPM, nav nepieciešami darījumu ieraksti, ISAM vaicājumu efektivitāte ir ievērojama, un atmiņas patēriņš ir ļoti mazs. MyISAM manto šīs priekšrocības, vienlaikus sekojot līdzi laikam lielam skaitam noderīgu jaunu funkciju un saistīto rīku. Piemēram, ņemot vērā vienlaicīguma kontroli, tiek nodrošinātas tabulas līmeņa slēdzenes, un, lai gan MyISAM pati neatbalsta kļūdu toleranci, to var izmantot, lai atgūtos no kļūmēm, izmantojot myisamchk. Un tā kā MyISAM katrai tabulai izmanto savus neatkarīgos krātuves failus (MYD datu failu un MYI indeksa failu), ir ļoti ērti dublēt un atjaunot (pietiek ar kopēšanas pārrakstīšanu), kā arī atbalsta tiešsaistes atkopšanu. Salīdzinot ar citiem krātuves dzinējiem, MyISAM ir lielākā daļa rīku tabulu pārbaudei un labošanai. MyISAM tabulas var saspiest, un tās atbalsta pilnteksta meklēšanu. Tie nav droši pret darījumiem un neatbalsta ārējās atslēgas, tāpēc, ja jūsu lietojumprogrammai nav nepieciešami darījumi un tiek apstrādātas tikai pamata CRUD operācijas, tad MyISAM ir pareizais ceļš. InnoDB ir paredzēts augstas vienlaicīgas lasīšanas un rakstīšanas situācijām, izmantojot MVCC (Multi-Version Concurrency Control) un rindu līmeņa bloķēšanas, lai nodrošinātu ACID saderīgu transakciju atbalstu. InnoDB atbalsta ārējās atslēgas atsauces integritāti un ir kļūdu atgūšanas iespējas. Turklāt InnoDB veiktspēja faktiski ir diezgan laba, it īpaši, apstrādājot lielu datu apjomu, oficiālā izteiksmē: InnoDB CPU efektivitāte nav salīdzināma ar citiem diska relāciju datu bāzes glabāšanas dzinējiem. Tomēr InnoDB dublēšana un atkopšana ir nedaudz apgrūtinošāka, ja vien neizmantojat Mulit-tablespace atbalstu, ko nodrošina versija 4.1 vai jaunāka, jo atšķirībā no MyISAM, InnoDB datu faili neatbilst katrai tabulai neatkarīgi. Tā vietā tiek izmantota koplietojamā tabula, un vienkāršā kopiju pārrakstīšanas metode viņam nav piemērota, un dati ir jāatjauno pēc MYSQL apturēšanas. Izmantojot tabulas tabulas atstarpes, katra tabula atbilst atsevišķam tabulas failam, situācija ir daudz vienkāršāka. Tam ir tādas pašas īpašības kā BDB tipiem, un tie atbalsta arī ārējās atslēgas. InnoDB tabulas ir ātras un tām ir bagātākas funkcijas nekā BDB, tāpēc tas ir ieteicams, ja jums ir nepieciešams transakciju drošs krātuves dzinējs.
Kopumā InnoDB ir laba izvēle, ja ir nepieciešams darījumu atbalsts un tam ir augsts vienlaicīgas lasīšanas un rakstīšanas biežums. BDB var apsvērt, ja vienlaicīgas lasīšanas un rakstīšanas biežums nav augsts, bet BDB vairs netiks atbalstīts MySQL 5.1 un jaunākās versijās. Šī opcija vairs nav pieejama
Pēc noklusējuma InnoDB transakcijas ir atvērtas (iestatiet autocommit = 0), kas nozīmē, ka katru reizi, kad tiek ievietots ieraksts, InnoDB tabula to uzskatīs par atsevišķu transakciju. Tātad, ja mēs ievietojam 10 000 ierakstu un neaizveram darījumu, tad InnoDB tipa tabula to uzskatīs par 10 000 darījumiem, un kopējais ievietošanas laiks šajā laikā ir daudz, šobrīd mums vispirms ir jāizslēdz darījums un pēc tam jāievieto, tāpēc ātrums būs ļoti ātrs Kas attiecas uz kaudzi un BDB (Berkeley DB), salīdzinoši runājot, iespiešanās līmenis nav tik labs kā iepriekšējie divi, bet dažos gadījumos Heap krātuves dzinējs joprojām ir ļoti piemērojams, kas glabā datus atmiņā, un ir ļoti ātrs, jo nav diska I/O gaidīšanas. Bet, tā kā tas ir atmiņas glabāšanas dzinējs, visas veiktās izmaiņas pazudīs pēc servera restartēšanas. Heap ir lieliska vieta, kur izmantot BDB testēšanai, jo tā ir MySQL pirmais transakciju drošais krātuves dzinējs. Veidots, pamatojoties uz Berkeley DB datu bāzes bibliotēku, tas ir arī darījumu drošs, bet BDB acīmredzot nav tik populārs kā InnoDB, jo lielākā daļa MySQL atmiņas dzinēju, kas atbalsta darījumus, meklē arī MVCC vai rindas līmeņa bloķēšanas krātuves dzinējus, bet BDB atbalsta tikai lapas līmeņa bloķēšanu.
InnoDB dzinējs
InnoDB ir transakciju krātuves dzinējs, kas atbalsta atcelšanu un ir paredzēts, lai nodrošinātu augstas veiktspējas pakalpojumus, apstrādājot lielu datu apjomu, un izpildlaikā atmiņā izveido bufera baseinus, lai buferizētu datus un indeksus.
InnoDB dzinēja priekšrocības:
1. Atbalstiet darījumu apstrādi un ACID darījumu funkcijas;
2. Tiek realizēti četri SQL standarta izolācijas līmeņi;
3. Atbalstiet rindas līmeņa bloķēšanu un ārējās atslēgas ierobežojumus;
4. Datu atgūšanai varat izmantot darījumu žurnālus.
5. Bloķēšanas līmenis ir rindas bloķēšana, kas ir piemērota biežai tabulas modifikācijai ar augstu vienlaicīgumu, un augsta vienlaicīgums ir labāks nekā MyISAM. Trūkums ir tas, ka sistēmas patēriņš ir liels.
6. Indekss ne tikai kešatmiņā saglabā sevi, bet arī kešatmiņā datus, kas prasa vairāk atmiņas nekā MyISAM.
InnoDB dzinēja trūkumi:
Tā kā tabulā netiek saglabāts rindu skaits, tiek skenēta visa tabula, izmantojot COUNT statistiku.
MyISAM dzinējs
MyISAM ir noklusējuma dzinējs pirms MySQL 5.5.5 un ir paredzēts ātrai lasīšanai.
MyISAM dzinēja priekšrocības:
1. Augstas veiktspējas lasīšana;
2. Tā kā tas saglabā rindu skaitu tabulā, visa tabula netiks skenēta, izmantojot COUNT statistiku;
MyISAM dzinēja trūkumi:
1. Slēdzenes līmenis ir galda slēdzene, un pulksteņa slēdzenes priekšrocība ir tā, ka gaisvads ir mazs un slēdzene ir ātra; Trūkumi ir tādi, ka slēdzenes detalizācija ir liela, bloķēšanas impulsa varbūtība ir augsta un vienlaicīguma jauda ir zema, kas ir piemērota vaicājumu pakalpojumiem.
2. Šī programma neatbalsta transakcijas vai ārējās atslēgas.
3. INSERT un UPDATE operācijām ir jābloķē visa tabula;
4. Tas saglabā rindu skaitu tabulā, tāpēc, kad SELECT COUNT(*) FROM TABLE, tam ir nepieciešams tieši nolasīt saglabātās vērtības, neskenējot visu tabulu.
Piemērojamie scenāriji
MyISAM ir piemērots: (1) veikt daudz skaita aprēķinu; (2) Reta ievietošana un ļoti bieži vaicājumi; (3) Nav biznesa.
InnoDB ir piemērots: (1) augstām uzticamības prasībām vai darījumiem; (2) Tabulas atjauninājumi un vaicājumi ir diezgan bieži, un tabulas bloķēšanas iespēja ir salīdzinoši augsta.
Tabulu salīdzinājums
| Rekvizīti | Mans ISAM | Kaudze | BDB | InnoDB | | Darījumi | Nav atbalstīts | Nav atbalstīts | Kā mūris | Kā mūris | | Bloķēšanas detalizācija | Galda slēdzene | Galda slēdzene | Lapas bloķēšana (lapa, 8KB) | Bloķēt | | Uzglabāšanas | Sadalīt failus | Atmiņā | Viens fails katrā tabulā | Galda vieta | | Izolācijas līmenis | ne | ne | Lasīt apņēmies | Visi | | Pārnēsājams formāts | būt | N/A | ne | būt | | Citāta pilnīgums | ne | ne | ne | būt | | Datu primārā atslēga | ne | ne | būt | būt | | MySQL kešatmiņā saglabā datu ierakstus | ne | Jā | Jā | Jā | | Izmantojamību | Pilna versija | Pilna versija | MySQL-Max | Pilna versija |
Dažas atšķirības detaļās
1. InnoDB neatbalsta FULLTEXT tipa indeksus, kas tiek atbalstīti kopš MySQL 5.6 (eksperimentāls).
2. InnoDB nesaglabā konkrēto tabulas rindu skaitu, tas ir, izpildot atlasīt count() no tabulas, InnoDB ir jāskenē visa tabula, lai aprēķinātu, cik rindu ir, bet MyISAM ir vienkārši jānolasa saglabāto rindu skaits. Ņemiet vērā, ka, ja priekšrakstā count() ir nosacījums where, operācija abām tabulām ir vienāda.
3. AUTO_INCREMENT veida laukiem InnoDB jāsatur indekss tikai ar šo lauku, bet MyISAM tabulā varat izveidot kopīgu indeksu ar citiem laukiem.
4. Kad DELETE FROM tabulu, InnoDB neizveidos tabulu no jauna, bet izdzēsīs to rindu pa rindai.
5. Operācija LOAD TABLE FROM MASTER nedarbojas InnoDB, risinājums ir vispirms mainīt InnoDB tabulu uz MyISAM tabulu, importēt datus un pēc tam mainīt to uz InnoDB tabulu, bet tas nav piemērojams tabulai, kurā tiek izmantotas papildu InnoDB funkcijas (piemēram, ārējās atslēgas).
6. Turklāt InnoDB tabulas rindas bloķēšana nav absolūta, ja MySQL nevar noteikt skenējamo diapazonu, izpildot SQL paziņojumu, InnoDB tabula bloķēs arī visu tabulu.
7. InnoDB neatbalsta pilna teksta indeksēšanu, bet MyISAM to dara. Pilnteksta indeksēšana attiecas uz katra vārda apgrieztās secības indeksa izveidi rakstzīmē, varčarā un tekstā (izņemot pieturvārdus). MyISAM pilnteksta indekss faktiski ir bezjēdzīgs, jo tas neatbalsta ķīniešu vārdu segmentāciju, un lietotājam tas ir jāieraksta datu tabulā pēc vārdu segmentēšanas, un vārdi ar mazāk nekā 4 ķīniešu rakstzīmēm tiks ignorēti kā pieturvārdi.
|