sql >> Database >  >> RDS >> Mysql

InnoDB of MyISAM - Waarom niet allebei?

U kunt zowel MyISAM- als InnoDB-tabellen in dezelfde database hebben. Wat u echter zult vinden, is dat MyISAM, wanneer u zeer grote tabellen heeft, problemen met de tafelvergrendeling veroorzaakt. Wat dit uiteindelijk doet, is dat het de hele tafel vergrendelt voor een enkele transactie, wat erg slecht is als je veel gebruikers hebt die je website gebruiken. Als u bijvoorbeeld een gebruiker heeft die naar iets op uw site zoekt en de zoekopdracht duurt enkele minuten, dan kunnen gedurende die periode geen andere gebruikers uw site gebruiken omdat de hele tabel is vergrendeld.

InnoDB daarentegen gebruikt vergrendeling op rijniveau, wat betekent dat die rij de enige rij is die tijdens een transactie van de tafel is vergrendeld. InnoDB kan langzamer zijn bij zoekopdrachten omdat het geen full-text zoeken biedt zoals MyISAM, maar dat is geen groot probleem als je het vergelijkt met vergrendeling op tabelniveau van MyISAM. Als u InnoDB gebruikt, zoals veel grote sites, kunt u een server-side zoekmachine gebruiken zoals Sphinx voor zoekopdrachten in volledige tekst. Of u kunt zelfs een MyISAM-tabel gebruiken om te zoeken, zoals f00 suggereerde. Persoonlijk zou ik InnoDB vooral aanbevelen vanwege de vergrendelingsfunctie op rijniveau, maar ook omdat je zoeken in volledige tekst op veel andere manieren kunt implementeren.

Kortom, als je een prikbordtoepassing hebt met veel selecties, invoegingen en updates, is InnoDB waarschijnlijk de meest geschikte keuze. Maar als je zoiets niet bouwt (of iets anders met geregistreerde gebruikers) en je werkt meestal met statische inhoud (of meer leest dan schrijft), dan zou je MyISAM kunnen gebruiken.



  1. Geef elke DISTINCT-veldwaarde slechts één keer weer met lus

  2. Booleaanse velden in MySQL Django-modellen?

  3. Hergebruik subquery van Select Expression in WHERE-Clause

  4. Mysql, meerdere waarden opslaan in één kolom uit een andere tabel