heo: index mysql ?

Hallo,

"Wird beim Definieren eines INDEX kein Name für diesen INDEX angegeben, so wird der Name des ersten Feldes, daß im Index enthalten ist, mit einem Suffix z.B. _2, _3, ... verwendet."

Was hat es mit einem solchen Index auf sich. Ich weiß, den kann ich irgendwie über bestimmte Spatlen legen und das kann unter Umständen die Performance steigern, aber was hat es mit einem Index-Name auf sich?

Gruß

  1. Hello,

    Was hat es mit einem solchen Index auf sich. Ich weiß, den kann ich irgendwie über bestimmte Spatlen legen und das kann unter Umständen die Performance steigern, aber was hat es mit einem Index-Name auf sich?

    Irgendwie musst Du den Index ja ansprechen können, wenn Du z.B. "order by" benutzen willst. Wenn ein Index unter dem Namen vorhanden ist, wird dieser benutzt.

    Auch wenn Du den Index ändern willst, benötigst Du seinen Namen.

    Und nicht ganz unwichtig ist natürlich auch eine Indexverletzung. MySQL möchte Dir im Falle einer Index-Verletzung doch mitteilen können, welchen Index Du missachtet hast. Das ist dann wichtig, wenn ein Index als UNIQUE gekennzeichnet wurde, und Du nun versuchst eine Doublette einzutragen.

    In diesem Falle ist die Fehlermeldung nichts "Böses", sondern eben eine gewünschte Arbeitshilfe.

    Harzliche Grüße vom Berg
    http://bergpost.annerschbarrich.de

    Tom

    --
    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
    Nur selber lernen macht schlau
    Ein Jammer ist auch, dass die Dummen so selbstsicher und die Klugen voller Zweifel sind. Das sollte uns häufiger zweifeln lassen :-)

    1. Hallo,

      ok. Aber ich verstehe es noch nicht so ganz. Ich spreche doch nie den Index an sonder halt vielleicht die Spalte auf dem der Index liegt oder?

      Gruß

      1. Hello,

        ok. Aber ich verstehe es noch nicht so ganz. Ich spreche doch nie den Index an sonder halt vielleicht die Spalte auf dem der Index liegt oder?

        Du meinst, wenn Du "ORDER BY" benutzt?

        Dann sollte das DBMS automatisch erkennen, wenn es einen Index mit dem Namen gibt bzw einer zur Spalte passt.

        http://dev.mysql.com/doc/refman/5.1/en/order-by-optimization.html

        Harzliche Grüße vom Berg
        http://bergpost.annerschbarrich.de

        Tom

        --
        Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
        Nur selber lernen macht schlau
        Ein Jammer ist auch, dass die Dummen so selbstsicher und die Klugen voller Zweifel sind. Das sollte uns häufiger zweifeln lassen :-)

        1. Hallo,

          letztendlich meine ich ... ich habe keinen Plan von Indexes und für welche Zwecke sie sinnvoll sind und wofür ich dann ihren "Namen" brauhce?

          Gruß

          1. Hello,

            letztendlich meine ich ... ich habe keinen Plan von Indexes und für welche Zwecke sie sinnvoll sind und wofür ich dann ihren "Namen" brauhce?

            Was machst Du denn mit dem DBMS?

            Vielleicht brauchst Du das auch nicht?
            Das ist ja das vertrackte an Dingen, die man nicht kennt.
            Man weiß gar nicht, dass sie einem fehlen.

            Bei kleinen Datenmengen (einige 1000 Datensätze) kannst Du bei MySQL meistens ohne Index auskommen.
            Wenn Du aber z.B. sicherstellen willst, dass ein Primärschlüssel vorhanden ist, dann muss dieser eineindeutig sein. Das bedeutet, dass es jeden Schlüsselwert nur genau einmal gibt und dass jeder Datensatz nur durch genau einen Schlüsselwert repräsentiert wird, Andersherum dann natürlich genauso: Jeder Schlüsselwert gehört zu genau einem Datensatz.

            Um nun sicherzustellen, dass es jeden Schlüssel nur einmal gibt, richtet man einen UNIQUE INDEX ein. Mit dessen Hilfe sorgt das DBMS dann dafür, dass keine Soubletten eingetragen werden können.
            Bei einem Insert würde der Datensatz mit dem doppelten Schlüsselwert abgelehnt werden. Hier bekommst Du dann eine Fehlermeldung, die Dir sagt, warum.

            Ich schlage Dir vor, das einfach mal auszuprobieren.
            Das geht am einfachsten in der MySQL-Konsole (mysql> ) oder im phpMyAdmin oder in SQL-Front (www.sql-front.de) oder vergleichbaren Tools, aber selbstverständlich auch mit Hilfe von PHP.

            Harzliche Grüße vom Berg
            http://bergpost.annerschbarrich.de

            Tom

            --
            Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
            Nur selber lernen macht schlau
            Ein Jammer ist auch, dass die Dummen so selbstsicher und die Klugen voller Zweifel sind. Das sollte uns häufiger zweifeln lassen :-)

            1. Hallo,

              ja das mit dem Unique verstehe ich. Das ist kein Problem.

              Doch was gibt es noch für Indexes (die ich eben nicht kenn und deswegen nicht weiß ob ich sie vermisse?)

              Gruß

              1. Hello,

                ja das mit dem Unique verstehe ich. Das ist kein Problem.

                Doch was gibt es noch für Indexes (die ich eben nicht kenn und deswegen nicht weiß ob ich sie vermisse?)

                Zusammengesetzte Schlüssel (Kombinationsschlüssel)
                Bei M:N-Realtionen sind die dann auch Unique, für andere Anwendungsfälle müssen sie es aber nicht unbedingt sein.

                Match-Codes, heute nicht mehr so gebräuchlich. Sie haben aus mehreren Feldern jeweils nur einen relevanten Teil aufgenommen. Das hat man gemacht, um Indexe einzusparen. Sie dienten der leichteren Auffindung von Datensätzen in "großen" Datenbeständen, also z.B. in der Debitorenbuchhaltung oder der Faktura.

                Ein Index ist im Prinzip immer bei einer Relation notwendig, wenn man die DB nicht zum Stehen bringen will. Das DBMS aknn aber auch selber temporäre Indexe anlegen, dann aber i.d.R. im Hauptspeicher, wenn davon genug vorhanden ist.

                Harzliche Grüße vom Berg
                http://bergpost.annerschbarrich.de

                Tom

                --
                Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
                Nur selber lernen macht schlau
                Ein Jammer ist auch, dass die Dummen so selbstsicher und die Klugen voller Zweifel sind. Das sollte uns häufiger zweifeln lassen :-)