{"id":481,"date":"2011-01-17T11:30:20","date_gmt":"2011-01-17T10:30:20","guid":{"rendered":"https:\/\/d-mueller.de\/blog\/?p=481"},"modified":"2011-01-14T15:12:51","modified_gmt":"2011-01-14T14:12:51","slug":"mysql-storage-engine-vergleich-warum-myisam","status":"publish","type":"post","link":"https:\/\/d-mueller.de\/blog\/mysql-storage-engine-vergleich-warum-myisam\/","title":{"rendered":"MySQL Storage Engine Vergleich &#8211; Warum MyISAM?"},"content":{"rendered":"<p>Neuerdings ist InnoDB die Standard-Engine von MySQL, was ich echt vern\u00fcnftig finde. Ich finde es erstaunlich, wie sich MyISAM so lange halten konnte und w\u00fcrde gern verstehen, warum. Meiner Meinung nach zeichnet die Verbreitung von MyISAM ein trauriges Bild f\u00fcr Webanwendungen im Allgemeinen. <b>Foreign Keys sind ein Segen!<\/b> Deshalb die gewagte Aussage: <i>Webanwendungen werden oft als wilder Hack hingeschustert, weswegen auch auf Datenbankseite keine vern\u00fcnftige Integrit\u00e4t gebraucht wird.<\/i><\/p>\n<p>Anders kann ich mir jedenfalls nicht erkl\u00e4ren, wie es MyISAM zu solch einer hohen Verbreitung geschafft hat. Nachfolgend f\u00fchre ich nochmal eine kleine (von mir kommentierte) Gegen\u00fcberstellung auf, die die wichtigsten Unterscheidungsmerkmale umfasst:<\/p>\n<h3>MyISAM<\/h3>\n<ul>\n<li>Die Daten-Speicherung in <a href=\"http:\/\/de.wikipedia.org\/wiki\/Byte-Reihenfolge\">little endian<\/a> soll f\u00fcr eine Maschinenunabh\u00e4ngigkeit \/ Betriebssystemunabh\u00e4ngigkeit sorgen &#8211; Ich wei\u00df nicht, in wiefern das im Webumfeld praxisrelevant ist (LAMP als Standard-Stack). Kommentare hierzu erw\u00fcnscht!<\/li>\n<li>NULL-Werte sind in indizierten Spalten zul\u00e4ssig<\/li>\n<li>MyISAM unterst\u00fctzt FULLTEXT-Indizes, Blobs und Text-Columns sind indizierbar &#8211; Praktisch!<\/li>\n<li>Die H\u00f6chstl\u00e4nge f\u00fcr Schl\u00fcssel betr\u00e4gt 1000 Bytes (kann aber durch ein rekompilieren beliebig angepasst werden)<\/li>\n<li>eine MyISAM-Tabelle kann maximal 64 Indizes haben &#8211; sollte reichen, wer mehr braucht hat oft beim Design was falsch gemacht.<\/li>\n<li>Pro Index d\u00fcrfen es bis zu 16 Spalten sein<\/li>\n<li>Jede Tabelle wird getrennt gespeichert: <a href=\"http:\/\/dev.mysql.com\/doc\/refman\/5.0\/en\/myisam-storage-engine.html\">Das Manual<\/a> sagt dazu:<br \/>\n<blockquote><p>\nJede MyISAM-Tabelle wird in drei Dateien auf der Festplatte gespeichert. Die Namen der Dateien beginnen mit dem Tabellennamen und haben eine Erweiterung, die den Dateityp angibt. Eine .frm-Datei speichert das Tabellenformat. Die Datendatei besitzt die Erweiterung .MYD (MYData). Die Indexdatei hat die Erweiterung .MYI (MYIndex).\n<\/p><\/blockquote>\n<\/li>\n<li>Wohl das <b>wichtigste Unterscheidungsmerkmal<\/b>: MyISAM arbeitet mit Table-Locking. Das ist beim Lesen schneller als das Row-Locking von InnoDB, wird aber bei parallelen Reads\/Writes die Schreibvorg\u00e4nge verz\u00f6gern. Siehe dazu: <a href=\"http:\/\/de.wikipedia.org\/wiki\/Erzeuger-Verbraucher-Problem\">Erzeuger-Verbraucher-Problem<\/a>.<\/li>\n<\/ul>\n<h3>InnoDB<\/h3>\n<ul>\n<li>Man liest &#8211; verglichen mit MyISAM &#8211; oft von einer sichereren Recovery im Fall eines Crashes<\/li>\n<li>Referentielle Integrit\u00e4t durch Foreign-Key-Unterst\u00fctzung. F\u00fcr mich DAS Feature.<\/li>\n<li><a href=\"https:\/\/d-mueller.de\/blog\/datenbank-transaktionen-von-akademischer-seite-behind-the-scenes\/\">Transaktionen<\/a>. In ernstgemeinten, kritischen Anwendungen geht es nicht ohne.<\/li>\n<li><a href=\"http:\/\/dev.mysql.com\/doc\/refman\/5.0\/en\/innodb-storage-engine.html\">Das Manual<\/a> sagt zur Serverauslastung:<br \/>\n<blockquote><p>\nInnoDB has been designed for maximum performance when processing large data volumes. Its CPU efficiency is probably not matched by any other disk-based relational database engine.\n<\/p><\/blockquote>\n<\/li>\n<\/ul>\n<p>Vielleicht habe ich ein Killer-Argument f\u00fcr MyISAM \u00fcbersehen? Und was spricht eigentlich gegen eine gemischte Verwendung von MyISAM \/ InnoDB in der selben Datenbank je nach jeweiliger Anforderung an eine Tabelle?<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Neuerdings ist InnoDB die Standard-Engine von MySQL, was ich echt vern\u00fcnftig finde. Ich finde es erstaunlich, wie sich MyISAM so lange halten konnte und w\u00fcrde gern verstehen, warum. Meiner Meinung nach zeichnet die Verbreitung von MyISAM ein trauriges Bild f\u00fcr &hellip; <a href=\"https:\/\/d-mueller.de\/blog\/mysql-storage-engine-vergleich-warum-myisam\/\">Weiterlesen <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[9,3],"tags":[],"class_list":["post-481","post","type-post","status-publish","format-standard","hentry","category-datenbanken","category-webdev"],"_links":{"self":[{"href":"https:\/\/d-mueller.de\/blog\/wp-json\/wp\/v2\/posts\/481","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/d-mueller.de\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/d-mueller.de\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/d-mueller.de\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/d-mueller.de\/blog\/wp-json\/wp\/v2\/comments?post=481"}],"version-history":[{"count":0,"href":"https:\/\/d-mueller.de\/blog\/wp-json\/wp\/v2\/posts\/481\/revisions"}],"wp:attachment":[{"href":"https:\/\/d-mueller.de\/blog\/wp-json\/wp\/v2\/media?parent=481"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/d-mueller.de\/blog\/wp-json\/wp\/v2\/categories?post=481"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/d-mueller.de\/blog\/wp-json\/wp\/v2\/tags?post=481"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}