Jamson: Entscheidungshilfen - Wo den Index? Welches Tabellenformat?

Hallo.

Ich habe leider keine Erfahrung was die Indexierung und Tabellenformate angeht.

Kann ich für jede tabelle mehr als einen Index setzen und wo macht es Sinn den Index zu setzen. Ausserdem: Wann sollte ich InnoDB, MyISAM usw. setzen?
Habt ihr das irgendwo übersichtliche Vergleiche?

Gruß,

Jamson

  1. echo $begrüßung;

    Kann ich für jede tabelle mehr als einen Index setzen und wo macht es Sinn den Index zu setzen.

    Ja. Und man kann Indexe auch über mehrere Spalten setzen. Da wo die Auswahl von Datensätzen anhand einer Spalte erfolgt, lohnt sich im Allgemeinen ein Index. Jedoch nicht in jedem Fall. Manchmal entscheidet MySQL, den Index nicht zu verwenden, weil - aus welchen Gründen auch immer - sowieso ein Full-Table-Scan gemacht werden muss. Näheres zur Verwendung zeigt dir ein vor das Statement gestelltes EXPLAIN.

    Ein Index kommt nicht zum Nulltarif daher. Die Kosten eines Index musst du bei Änderungsvorgängen zahlen, denn da muss der Index erneuert werden. Bei umfangreichen Änderungen kann es deshalb sinnvoll sein, den Index zu löschen und nachher neu zu erstellen. (Für eine Unique Index oder einen Autoincrement-Primary Key ist das weniger sinnvoll. Beide haben Funktionalität, die auch beim Ändern benötigt wird.)

    Wann sollte ich InnoDB, MyISAM usw. setzen?

    Hast du dir die Leistungsmerkmale der Engines im MySQL-Handbuch angesehen? Verwende sie nach den fachlichen Erfordernissen. Brauchst du keine Features, die nur InnoDB kann, nimm MyISAM.

    echo "$verabschiedung $name";

    1. Moin Moin!

      »» Wann sollte ich InnoDB, MyISAM usw. setzen?

      Hast du dir die Leistungsmerkmale der Engines im MySQL-Handbuch angesehen? Verwende sie nach den fachlichen Erfordernissen. Brauchst du keine Features, die nur InnoDB kann, nimm MyISAM.

      Oder benutze ein RDBMS, bei dem alle Features grundsätzlich funktionieren und nicht nur, wenn man einen bestimmten Tabellentyp benutzt. PostgreSQL zum Beispiel, "Free as in speech and in beer", bei Bedarf auch mit professionellem Support.

      Generell gibt es das Theater mit verschiedenen Tabellentypen so extrem nur bei MySQL. Andere RDBMS unterscheiden gerade mal noch zwischen normalen Tabellen und temporären Tabellen, die nach Session-Ende oder zu einem anderen, definierten Zeitpunkt automatisch beseitigt werden. Manche RDBMS unterscheiden gar keine verschiedenen Tabellentypen, es gibt nur einen Typ, und der kann alles.

      Alexander

      --
      Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so".
      1. echo $begrüßung;

        Generell gibt es das Theater mit verschiedenen Tabellentypen so extrem nur bei MySQL.

        Was ist daran schlecht, für unterschiedliche Anforderungen unterschiedliche Lösungen zur Verfügung zu stellen?

        echo "$verabschiedung $name";

        1. moin,

          Was ist daran schlecht, für unterschiedliche Anforderungen unterschiedliche Lösungen zur Verfügung zu stellen?

          macht es komplexer und nicht mehr transparent. manchmal läßt sich das nicht vermeiden, aber irgendwie scheinen das andere dbms hinzubekommen, ohne dass ich einen deutlich mehrwert seitens mysql erkennen kann, vielleicht weil ich ihn auch einfach nur nicht kenne.

          Ilja

          1. echo $begrüßung;

            » Was ist daran schlecht, für unterschiedliche Anforderungen unterschiedliche Lösungen zur Verfügung zu stellen?
            macht es komplexer und nicht mehr transparent.

            Kommt auf die Sicht an. Aus Anwendersicht hat man die Komplexität der Wahl, als Hersteller kann man sich mehr auf die Spezialitäten der einzelnen Engines konzentrieren, ohne auf "störende" Features Rücksicht zu nehmen.

            Außerdem hat man ja nur die Entscheidung zwischen zwei Enginges (MyISAM und InnoDB) zu treffen. Alles anderen sind Spezialfälle und können normalerweise unberücksichtigt gelassen werden.

            [...] irgendwie scheinen das andere dbms hinzubekommen, ohne dass ich einen deutlich mehrwert seitens mysql erkennen kann, vielleicht weil ich ihn auch einfach nur nicht kenne.

            Das Argument war eigentlich immer Geschwindigkeit, die man erreichte, weil diverse Features nicht implementiert sind, die für die Zielgruppe weniger interessant sind. YAGNI.

            echo "$verabschiedung $name";

            1. yo,

              »» macht es komplexer und nicht mehr transparent.

              Kommt auf die Sicht an.

              ist weniger eine frage der sichtweise, komplexer wird es für alle. die frage ist nur, habe ich im verhältnis auf der "haben seite" wieder etwas, was dies aufwiegt, bzw. überwiegt.

              Außerdem hat man ja nur die Entscheidung zwischen zwei Enginges (MyISAM und InnoDB) zu treffen. Alles anderen sind Spezialfälle und können normalerweise unberücksichtigt gelassen werden.

              sicherlich machen zwei typen nicht den kohl fett, aber es ist eine mehrkomplexität, die ich immer sehr gut überlegen sollte. und vor allem entferne ich mich damit von der üblichen vorgehensweise anderer dbms und das muss dann schon sehr gewichtig sein das argument. mit dem ausführen von GROUP BY haben wir eine ähnlche abweichende funktionalität bei mysql, die aber in der praxis mehr übel als nutzen ist.

              Das Argument war eigentlich immer Geschwindigkeit, die man erreichte, weil diverse Features nicht implementiert sind.

              ist eine grundsätzliche problematik in der IT. geschwindigkeit ist immer was gutes, aber alleine aus der sichtweise kann man es nicht betrachten, ich muss es im gesamtkontext sehen. alleine die tatsache, dass es dbms gibt, ist ein hinweis darauf, dass spezialisierung und somit auch geschwindigkeit nicht alles ist.

              Ilja