spielt die Reihenfolge der WHERE - Bedingungen eine Rolle

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

  • spielt die Reihenfolge der WHERE - Bedingungen eine Rolle

    Hallöle an alle,

    hab nur mal ne kurze Zwischenfrage. Speilt die Reihenfolge der Bedingungen nach WHERE (And AND...usw) eine Rolle in Bezug auf die Abfragezeit oder optimiert mysql das ganze von selbst?

    Danke
    www.unister.de

    what students want!

  • #2
    Nein, sie spielt keine Rolle...
    Wichtig sind Indices auf jeder Spalte, die in einer WHERE-Klausel vorkommt.

    CAT Music Files

    Kommentar


    • #3
      Abfragen werden performanter, wenn die restriktivsten Überprüfungen ganz zu Beginn ausgeführt werden.

      Angenommen:

      WHERE feld1 = "A" AND feld2 = "B"

      Angenommen es werden bei feld1 mit Inhalt "A" 1.ooo Records gefunden und 200 Records bei feld2 mit Inhalt "B", die Kombination beider ergibt 10 Records.

      Im o.a. Beispiel würden 1.ooo Records untersucht werden um diese 10 Records zu finden, also 990 Überprüfungen ohne Übereinstimmung.

      WHERE feld2 = "B" AND feld1 = "A"

      Es werden nur mmehr 200 Records weiter überprüft, also 190 Überprüfungen ohne Übereinstimmung.

      Das bedeutet weniger Rechenzeit und weniger Platten-I/Os.

      Man sollte nicht für alle möglichen Felder Indizes anlegen. Jeder zusätzliche Index belegt zusätzlichen Speicherplatz und wirkt sich in der Folge negativ auf die Performance bei Schreiboperationen aus. Indizes werden bei Änderungen aktualisiert, mitunter reorganisiert, je mehr Indizes, desto länger dauert das.

      Werden Indizes nur selten verwendet, verlangsamen sie die Aktualisierungsprozesse.

      Kommentar


      • #4
        Erstmal danke für die Hilfe!!!

        Können indicies auch nur beispeilsweise nur alle 30 neuen Datensätze angelegt werden (ich bin der meinung ich hab das mal gehört, bin mir aber nicht sicher)??

        Wie sieht das aus bei JOIN-abfragen über mehrere Tablellen

        zb.
        From table1
        LEFT JOIN table2 ON table1.schlüsselfeld=table2.schlüsselfeld
        LEFT JOIN table3 ON table1.schlüsselfeld=table3.schlüsselfeld
        WHERE table1.test = '1' AND table1.test2 = 'Y' AND table2.hallo ='N'

        werrden bei diesem Beispeil zuerst die Datendsätze der table1 rausgesucht wo test = '1' und test2 = 'Y' und dann nach Datensätzen gesucht wo table1.schlüsselfeld=table2.schlüsselfeld? Oder macht mysql es umgekehrt - wäre doch eigentlich blöd oder?

        Danke und Gruss
        www.unister.de

        what students want!

        Kommentar


        • #5
          Im MySQL-Manual findest Du unter dem Kapitel
          "Getting maximum performance from MySQL"
          unter anderem Ausführungen zu den Themen
          "How MySQL optimizes WHERE clauses" und
          "How MySQL optimizes LEFT JOIN"

          http://www.mysql.com/documentation/mysql/alternate.html

          Kommentar

          Lädt...
          X