sql >> Databáze >  >> RDS >> Mysql

InnoDB nebo MyISAM - Proč ne obojí?

Ve stejné databázi můžete mít tabulky MyISAM i InnoDB. Co však zjistíte, když máte velmi velké tabulky, MyISAM způsobí problémy se zamykáním tabulek. To nakonec udělá to, že zamkne celou tabulku pro jednu transakci, což je velmi špatné, pokud váš web používá mnoho uživatelů. např. Pokud máte uživatele, který na vašem webu něco hledá, a vyplnění dotazu trvá několik minut, žádní jiní uživatelé nemohou váš web během tohoto období používat, protože celá tabulka je uzamčena.

InnoDB na druhé straně používá zamykání na úrovni řádků, což znamená, že tento řádek je jediným řádkem uzamčeným z tabulky během transakce. InnoDB může být pomalejší při vyhledávání, protože nenabízí fulltextové vyhledávání jako MyISAM, ale to není velký problém, když to porovnáte se zamykáním na úrovni tabulky MyISAM. Pokud používáte InnoDB, jako mnoho velkých webů, můžete použít vyhledávač na straně serveru, jako je Sphinx pro fulltextové vyhledávání. Nebo můžete dokonce použít tabulku MyISAM k vyhledávání jako f00 navrhl. Osobně bych doporučil InnoDB hlavně kvůli funkci zamykání na úrovni řádků, ale také proto, že fulltextové vyhledávání můžete implementovat mnoha jinými způsoby.

V zásadě, pokud máte aplikaci na nástěnku se spoustou výběrů, příloh a aktualizací, InnoDB je pravděpodobně obecně vhodnou volbou. Pokud ale nestavíte něco takového (nebo jakoukoli jinou věc s registrovanými uživateli) a vaše pracovní většinou se statickým obsahem (nebo více čtení než zápisů), pak byste mohli použít MyISAM.



  1. Překročena maximální doba provádění 30 sekund

  2. Jak číst a analyzovat plány provádění SQL Serveru

  3. django.db.utils.ProgrammingError:vztah již existuje

  4. Nativní dotaz hibernace – sloupec char(3).