Frage

Ich habe folgende Frage:Ich entwerfe eine Webanwendung mit mehreren Dutzend kleinen Nachschlagetabellen:Diese Tabellen enthalten normalerweise drei Spalten (ID, Name, Beschreibung) und einige Zeilen (meistens weniger als 50, maximal etwa 450).

Es wird erwartet, dass sich diese Nachschlagetabellen nur selten ändern (sie stammen aus dem Standard, der sich alle paar Jahre ändert) und werden nur verwendet, um:

  • Fülloptionen in HTML auswählen
  • mit anderen Datensätzen in Berichten verknüpft werden

Es wird nur geben SELECT aussagen zu diesen Tabellen 99% der Fälle, aber es wird ziemlich viele davon geben.

Ich frage mich, welche Datenbank-Engine am effizientesten zu verwenden wäre?

Hier sind meine Überlegungen:

SPEICHER

  • Profi:sehr schnell
  • Nachteil:wenn der Server abstürzt, gehen alle Daten verloren und müssen neu erstellt werden
  • Nachteil:unterstützt keine Fremdschlüssel

komprimiertes MyISAM

  • Profi:schnell
  • Nachteil:unterstützt keine Fremdschlüssel

InnoDB

  • Profi:fremdschlüsselunterstützung

Was ich fragen möchte, ist, ob es einen signifikanten Vorteil gibt, etwas anderes zu verwenden als InnoDB - leistungsmäßig

Danke, Zbynek

War es hilfreich?

Lösung

Ich habe eine ähnliche Frage im August 2011 beantwortet : Welches DBMS eignet sich für superschnelle Lesevorgänge und eine einfache Datenstruktur?

Da fragst du nach MySQL und welcher Speicher-Engine.Um ehrlich zu sein, ist es schwer zu sagen, denn es gibt seltene Fälle, in denen MyISAM InnoDB bei der Auswahl übertreffen kann.

Hier sind einige meiner früheren Beiträge zu dieser Kontroverse

Sie könnten jetzt fragen :Warum sollte ich MyISAM jemals InnoDB vorziehen?

Schauen Sie sich dieses Diagramm an (erstellt von Vadim Tkachenko, CTO von Percona)

InnoDB Architecture

MyISAM speichert Indizes zwischen und Ihre Tabelle enthält 2 Indizes (PRIMÄRSCHLÜSSEL für ID und einen Index für Name).Auf der anderen Seite hat InnoDB zu viele bewegliche Teile, um Platz zu finden, insbesondere wenn der InnoDB-Pufferpool regelmäßig 16 KB Seiten laden und schließen muss.

Um fair zu sein, sollten Sie ein Experiment machen.

Dies gibt Ihnen die beste Einschätzung für die Auswahl der Speicher-Engine für Ihren Datensatz.

PROBIEREN SIE ES AUS!!!

Andere Tipps

  • "Komprimiertes MyISAM" - was ist das?Vielleicht "Archiv"?
  • Komprimierung ist nicht erforderlich;die Tabellen sind zu klein und werden schnell vollständig zwischengespeichert.
  • FOREIGN KEYS -- Warum?Sie haben Ihren Code debuggt, nicht wahr?Es wird keine baumelnden Dinge zu überprüfen geben.
  • MEMORY ist nicht unvernünftig, wenn sie schreiben 'Reload' -Code, der ausgeführt wird, wenn Sie den Server aufrufen, und alle Aktualisierungen der Tabelle werden in beide auf den Server geschrieben MEMORY tabelle und das persistente Backup.
  • MyISAM ROW_FORMAT=FIXED -- das ist eine alte Frauengeschichte;verwenden DYNAMIC und VARCHARs.
  • Innodbs "Clustered" PRIMARY KEY macht Suchvorgänge für Ihren Zweck etwas schneller als MyISAM.
  • Haben Sie wissen dass die Nachschlagetabellen eine spürbare Verlangsamung verursachen?Ich bezweifle ernsthaft, dass sie es sind.
  • Tun nicht verwenden Sie Nachschlagetabellen für "kontinuierliche" Werte, z FLOATs und DATEs.

Ich stimme für InnoDB ohne FKs.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit dba.stackexchange
scroll top