TS: MySQL Indexnutzung

Hello,

sicher eine einfache Frage für die Wissenden, aber ich bin darüber eben das erste Mal gestolpert und finde nichts Zielführendes ...

In MySQL wird ein Index aus ca. 10 Fragmenten erstellt. Er hat einen Namen erhalten.
Wie kann ich nun beim Select usw. den Index mittles dieses Namens nutzen? Oder muss ich tatsächlich immer wieder alle 10 Fragemente aufzählen?

sowas wie order bei index(indexname) wäre doch ganz angenehm.

Ich hoffe, dass ich nur etwas überlesen habe :-O

Liebe Grüße
Tom S.

--
Es gibt nichts Gutes, außer man tut es!
Das Leben selbst ist der Sinn.
  1. Tach!

    In MySQL wird ein Index aus ca. 10 Fragmenten erstellt.

    Das klingt so, als ob das eine unabhängige Tatsache wäre. Und was ist ein Fragment? Die Teile, aus denen sich ein Index zusammensetzt heißen nach wie vor Spalten/Felder/Columns.

    Wie kann ich nun beim Select usw. den Index mittles dieses Namens nutzen?

    Dazu gibt es anscheinend keine Syntax.

    Oder muss ich tatsächlich immer wieder alle 10 Fragemente aufzählen?

    Du könntest eine View erstellen.

    dedlfix.

    1. Hello,

      In MySQL wird ein Index aus ca. 10 Fragmenten erstellt.

      Und was ist ein Fragment? Die Teile, aus denen sich ein Index zusammensetzt heißen nach wie vor Spalten/Felder/Columns.

      Das stört mich wenig :-P
      Man kann bei MySQL auch andere Konstrukte als Spalten/Felder/Columns in den (temporären) Index aufnehmen. Deshalb habe ich "Fragmente" benutzt. Das sind eben Teile eines Ganzen. So zumindest verwende ich den Begriff sonst.

      Dazu gibt es anscheinend keine Syntax.

      Wenn DU das sagst, befürchte ich das jetzt auch.

      Du könntest eine View erstellen.

      Mal sehen. Vielleicht ist das die Lösung. Danke.

      Liebe Grüße
      Tom S.

      --
      Es gibt nichts Gutes, außer man tut es!
      Das Leben selbst ist der Sinn.
      1. Hallo TS.

        Man kann bei MySQL auch andere Konstrukte als Spalten/Felder/Columns in den (temporären) Index aufnehmen. Deshalb habe ich "Fragmente" benutzt. Das sind eben Teile eines Ganzen. So zumindest verwende ich den Begriff sonst.

        Sonst verwendet MySQL aber auch den Begriff „defragmentieren“, der mit deiner Definition kollidiert.

        MfG, at

  2. Hallo TS,

    ich bin mir sicher, ob ich dein Problem richtig verstanden habe. Aber gibt es dafür nicht index hints?

    MfG, at

    1. Hello,

      das liest sich gut, hat aber eben auf die Schnelle nicht funktioniert. Gab einen Syntaxfehler.

      Muss ich morgrn nochmal genauer untersuchen.

      Liebe Grüße
      Tom S.

      --
      Es gibt nichts Gutes, außer man tut es!
      Das Leben selbst ist der Sinn.
      1. Hello,

        Ich dachte erst, es funktioniert jetzt so:

        select * from Chapter use index (level);
        anstelle von
        select * from Chapter order by L1, L2, L3, L4, L5, L6;

        Der Unique Index aus den Spalten L1, L2, L3, L4, L5, L6 heißt level.

        Der Sysntaxfehler ist so auch verschwunden, aber dafür hat das Ganze keine Wirkung. Auch diverese andere denkbare Varianten habe ich ausprobiert und dann immer nur Syntaxfehler kassiert.

        Die Beispiele auf der Seite verwirren mich auch mehr, als sie mir nützen.

        Für die Verwendung des Indexnamens eines zusammengesetzten (Multicolumn-)Index ist dort auch leider nirgendwo ein Beispiel gegeben.

        Was ich erreichen möchte?
        Wenn sich in der Indexzusammensetzung etwas ändert, möchte ich dies nicht in allen Statements nachbessern müssen, sondern nur in der Datenbank den Index anpassen.

        Liebe Grüße
        Tom S.

        --
        Es gibt nichts Gutes, außer man tut es!
        Das Leben selbst ist der Sinn.
        1. Tach!

          Der Sysntaxfehler ist so auch verschwunden, aber dafür hat das Ganze keine Wirkung. Auch diverese andere denkbare Varianten habe ich ausprobiert und dann immer nur Syntaxfehler kassiert.

          Sortieren geht mit ORDER BY. Die Angabe eines Index ist nur eine Hilfe für den Optimizer, dass er einen bestimmten Index beim Ausführen der Query berücksichtigen soll. Auswirkungen auf die Sortierung hat das keine.

          dedlfix.

          1. Hello,

            Sortieren geht mit ORDER BY. Die Angabe eines Index ist nur eine Hilfe für den Optimizer, dass er einen bestimmten Index beim Ausführen der Query berücksichtigen soll. Auswirkungen auf die Sortierung hat das keine.

            Index und Ordnung voneinander zu trennen ist aber doch wohl sehr verwissenschaftlicht gedacht, oder?

            Sowie ich mittels eines Index nicht nur auf ein Element in einer Menge zugreifen kann, sondern dieses auch einen Vorgänger und einen Nachfolger hat, ist es doch schon passiert.

            Und warum soll man einen ohnehin festgelegten Namen für den Index nicht für die gleichlautende Zusammensetzung bei der Sortierung benutzen können? Das ist augenscheinlich ein Manquo von MySQL.

            Liebe Grüße
            Tom S.

            --
            Es gibt nichts Gutes, außer man tut es!
            Das Leben selbst ist der Sinn.
            1. Tach!

              Sortieren geht mit ORDER BY. Die Angabe eines Index ist nur eine Hilfe für den Optimizer, dass er einen bestimmten Index beim Ausführen der Query berücksichtigen soll. Auswirkungen auf die Sortierung hat das keine.

              Index und Ordnung voneinander zu trennen ist aber doch wohl sehr verwissenschaftlicht gedacht, oder?

              Der Index wird ja auch verwendet, wenn einer passend zur ORDER-BY-Klausel existiert. Ein Index ist aber keine Notwendigkeit, um nach einem bestimmten Kriterium sortieren zu können. Und man kann auch Sortierkriterien angeben für die kein Index angelegt werden kann, RAND() zum Beispiel. Ebenso kann man berechnete Ergebnisse in der SELECT-Klausel haben, nach denen sortiert werden kann, für die man aber ebenfalls keinen Index anlegen kann. Insofern ist da eine Trennung keineswegs nur akademischer Natur.

              Sowie ich mittels eines Index nicht nur auf ein Element in einer Menge zugreifen kann, sondern dieses auch einen Vorgänger und einen Nachfolger hat, ist es doch schon passiert.

              Ja, wenn. Aber das ist nicht zwangsläufig gegeben.

              Und warum soll man einen ohnehin festgelegten Namen für den Index nicht für die gleichlautende Zusammensetzung bei der Sortierung benutzen können? Das ist augenscheinlich ein Manquo von MySQL.

              Wenn, dann ist das ein Manko in SQL.

              dedlfix.

              1. Hello,

                [...]
                Das ist mir mir zwar klar, nützt mir aber nichts für mein Anliegen.

                Wenn, dann ist das ein Manko in SQL.

                Ich bezfeifele allerdings, dass das alle SQL-Dialekte nicht können. Ich hab jetzt aber leider keine Zeit dazu, Recherche zu betreiben.

                Liebe Grüße
                Tom S.

                --
                Es gibt nichts Gutes, außer man tut es!
                Das Leben selbst ist der Sinn.
          2. Hallo dedlfix,

            dann hatte ich das tatsächlich anders verstanden.

            Sortieren geht mit ORDER BY. Die Angabe eines Index ist nur eine Hilfe für den Optimizer, dass er einen bestimmten Index beim Ausführen der Query berücksichtigen soll. Auswirkungen auf die Sortierung hat das keine.

            Auch dazu ein wenig Doku.

            MfG, at