it-swarm-eu.dev

Jaký je rozdíl mezi MyISAM a InnoDB?

Rozumím, že tato otázka byla položena již dříve, ale většinou je položena ve vztahu ke konkrétní databázi nebo tabulce. Na tomto webu nemůžu najít odpověď, která popisuje dva motory a jejich rozdíly, bez ohledu na konkrétní databázi někoho.

Chci být schopen v budoucnu dělat informovanější rozhodnutí ohledně návrhu tabulky nebo databáze, takže hledám komplexní odpověď na rozdíly mezi těmito dvěma úložnými motory.

Jaký je rozdíl mezi MyISAM a InnoDB , a co bych měl hledat, když se snažím rozhodovat mezi jedním nebo druhým?

247
Scott

Hlavní rozdíly mezi InnoDB a MyISAM („s ohledem na návrh tabulky nebo databáze“, na které jste se ptali) jsou podpora „referenční integrity“ a „transakce“.

Pokud potřebujete, aby databáze vynucovala omezení cizího klíče, nebo potřebujete databázi pro podporu transakcí (tj. Změny provedené dvěma nebo více DML operacemi zpracovanými jako jedna pracovní jednotka, se všemi aplikovanými změnami nebo se všemi změnami vrácenými) pak byste si vybrali motor InnoDB, protože tyto funkce v motoru MyISAM chybí.

To jsou dva největší rozdíly. Dalším velkým rozdílem je souběžnost. S MyISAM získá příkaz DML exkluzivní zámek na stole a zatímco je tento zámek zadržen, žádná jiná relace nemůže provést operaci SELECT nebo DML v tabulce.

Tyto dva konkrétní motory, o které jste se zeptali (InnoDB a MyISAM), mají odlišné konstrukční cíle. MySQL má také další úložné stroje, které mají své vlastní konstrukční cíle.

Při výběru mezi InnoDB a MyISAM je tedy prvním krokem určení, zda potřebujete funkce poskytované InnoDB. Pokud ne, pak je MyISAM za úplatu.

Podrobnější diskuse o rozdílech je spíše nepraktická (na tomto fóru) chybí podrobnější diskuse o problémovém prostoru ... jak aplikace použije databázi, kolik tabulek, velikost tabulek, zatížení transakcí, objemy výběru , vložení, aktualizace, požadavky na souběžnost, funkce replikace atd.


Logický návrh databáze by se měl soustředit na analýzu dat a požadavky uživatelů; volba používat relační databázi by přišla později, a ještě později by byla volba MySQL jako systému pro správu relační databáze, a poté výběr úložného motoru pro každou tabulku.

406
spencer7593

MYISAM:

  1. MYISAM podporuje zamykání na úrovni tabulky
  2. MyISAM navržen pro potřeby rychlosti
  3. MyISAM nepodporuje cizí klíče, proto voláme MySQL s MYISAM je DBMS
  4. MyISAM ukládá své tabulky, data a indexy na diskový prostor pomocí samostatných tří různých souborů. (tablename.FRM, tablename.MYD, tablename.MYI)
  5. MYISAM nepodporuje transakci. S MYISAMem se nemůžete zavázat a vrátit zpět. Jakmile vydáte příkaz, je hotovo.
  6. MYISAM podporuje fulltextové vyhledávání
  7. MyISAM můžete použít, pokud je tabulka statičtější se spoustou výběru a méně aktualizací a mazáním.

INNODB:

  1. InnoDB podporuje zamykání na úrovni řádků
  2. InnoDB je navržen pro maximální výkon při zpracování velkého objemu dat
  3. InnoDB podporuje cizí klíče, proto voláme MySQL s InnoDB je RDBMS
  4. InnoDB ukládá své tabulky a indexy do tabulkového prostoru
  5. InnoDB podporuje transakci. Můžete se zavázat a vrátit zpět s InnoDB
337
medina