Ankündigung

Einklappen
Keine Ankündigung bisher.

Index richtig setzen

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Index richtig setzen

    Hallöchen,

    und weiss nun wie man bei einfachen Abfragen die Indexe richtig setzt, aber wie sieht es z. B. bei LEFT JOINS etc. aus?

    Meine Query sieht so aus:

    PHP-Code:
    SELECT 
        
    *
    FROM
        sys_sitemap 
    AS s
    LEFT JOIN
        sys_site_x_module 
    AS x
    ON
        s
    .Id x.SiteId
    LEFT JOIN
        sys_module 
    AS m
    ON
        x
    .ModuleId m.Id
    WHERE
        s
    .Alias 'start' 
    Sollte ich nun z. B. für s.Id, x.SiteId, x.ModuleId, m.ID und s.Alias ein Index setzen? Das * nun nicht beachten, das mache ich immer erst zum Schluss, wenn feststeht welche Felder ich wirklich brauche.

    Benny

  • #2
    wo willste denn bei der Abfrage einen index setzen?
    bzw was verstehst Du unter einem index?

    Kommentar


    • #3
      Unter Index versteh ich die Indizes, sprich den Index davon. Ich habe sonst immer ein Index über 1 Feld gelegt, welcher per WHERE geholt wird. Und die ON bei den LEFT JOINS versteh ich wie WHERE.

      Kommentar


      • #4
        Hi,
        theoretisch brauchst du gar keine Indexstrukturen erstellen. Macht aber natürlich Sinn.

        Gut, also sinnvoll sind Indexe nur auf Spalten nach denen sehr oft gesucht wird. Hast du zum Beispiel nur diesen Query der nach s.Alias = 'start' suchst brauchst du auf die Spalte Alias keinen Index setzen.

        Sinn macht es meistens auf die ID Spalten einen Index zu legen. In vielen Applikations identifizierst du einen Datensatz über die ID, so machst du es ja auch s.Id, x.SiteId, m.Id.

        Ich würde in diesen Tabellen bei den IDs jeweils einen Index anlegen, den Rest würde ich lassen.

        Kommentar


        • #5
          Zitat von Flor1an Beitrag anzeigen
          Ich würde in diesen Tabellen bei den IDs jeweils einen Index anlegen, den Rest würde ich lassen.
          Da ist doch bereits ein index wenn das auto-increment Felder sind. Da ist doch meistens schon ein Primärer Key drauf?!

          Kommentar


          • #6
            Zitat von Flor1an Beitrag anzeigen
            Gut, also sinnvoll sind Indexe nur auf Spalten nach denen sehr oft gesucht wird. Hast du zum Beispiel nur diesen Query der nach s.Alias = 'start' suchst brauchst du auf die Spalte Alias keinen Index setzen.
            Das würde ich eher als:
            "Es kommt darauf an, was Du optimieren willst. Die Datenbankgröße, das Einfügen oder das Suchen/Auslesen"
            ausdrücken wollen
            Wenn Du also sehr häufig/ständig neue Datensätze in sys_sitemap einfügst oder `alias` von vielen Datensätzen änderst, aber die gezeigte Abfrage nur alle paar Tage per Hand ausführst (und die Dauer im Rahmen egal ist), lohnt sich der Index nur für diese Abfrage vielleicht nicht.

            Kommentar


            • #7
              Also eingetragen wird nur beim Aufsetzten sehr viel, später kaum noch. Also wenn dann sollte es auf das Auslesen optimiert werden. Da hab ich allerdings noch ein Cache zwischen, sprich, wenn die Sitemap erstmal fertig ist, steht sie in einer File. Da ich aber geplant hatte die Cache regelmäßig zu leeren, sollte es beim refresh dennoch recht fix gehen

              Kommentar


              • #8
                Regelmäßig heißt stündlich, täglich, wöchentlich?

                Du kannst bei MySQL die Länge eines Index über eine Zeichenkette angeben (bei anderen DBMS auch).
                Code:
                CREATE INDEX idxAlias ON sys_sitemap(`alias`(3))
                bezieht beispielsweise nur die ersten drei Zeichen aus `alias` in den Index ein. Das reicht aus, um 'start' von 'stop' zu unterscheiden.

                Kommentar

                Lädt...
                X