Ankündigung

Einklappen
Keine Ankündigung bisher.

MySQL Sehr lange Query dauer

Einklappen

Neue Werbung 2019

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

  • #16
    LIMIT reduziert nicht die Anzahl zu durchsuchender Datensätze, sondern die Ergebnismenge.
    sonst wäre auch ORDER BY magie

    hätte gerne wegen #12 nochmals nachgehakt ...
    The string "()()" is not palindrom but the String "())(" is.

    Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
    PHP.de Wissenssammlung | Kein Support per PN

    Kommentar


    • #17
      Ja, müsste sich der TE mal zu melden, woher die items kommen...
      Competence-Center -> Enjoy the Informatrix
      PHProcks!Einsteiger freundliche TutorialsPreComposed Packages

      Kommentar


      • #18
        Zitat von Moewe Beitrag anzeigen
        Achso, ich hätte jetzt angenommen dem DBM ist erstmal egal, ob es sich um einen Primärschlüssel handelt. Ich bin davon ausgegangen egal auf welche Spalte ich mich beziehe, die art der Suche bleibt gleich.

        Daher habe ich immer, wenn ich wusste, ich werde nur einen Datensatz zurück bekommen, LIMIT 0,1 verwendet.
        Ja ja, die Wissensbegierigen Nutzer wieder. Bei solchen einfachen Aussagen muss man immer vorsichtig sein, es gibt viel was zu sehr verallgemeinert oder aus dem Kontext gerissen ist. Solche Halbwissen verbreitet sich dann sehr schön über solche Foren.

        Apropos Halbwissen, ich leg auch nochmal eine Portion oben drauf.

        Zitat von Arne Drews Beitrag anzeigen
        LIMIT reduziert nicht die Anzahl zu durchsuchender Datensätze, sondern die Ergebnismenge.
        Falsch...

        Zitat von hausl Beitrag anzeigen
        sonst wäre auch ORDER BY magie
        Ich gratuliere, deine Datenbank kann zaubern.

        Zitat von Moewe Beitrag anzeigen
        Danke für die Aufklärung der impliziten Suchbeschränkung bei Primärschlüsseln.
        Das trift prinzipiell auf alle Schlüssel zu.


        LIMIT 1 macht genau da Sinn wo die Datenbank ein full table scan/range scan ausführt und [b]nur ein Datensatz erwartet[b] wird. Mit LIMIT wird der Scan beim ersten Treffer abgebrochen, ohne LIMIT muss der Scan komplett durchgeführt werden. Die Datenbank kann nicht wissen das es nur ein Treffer gibt. Diese Konstelation sollte aber nur selten oder gar nicht auftreten. Mit fällt kein Beispiel ein was nicht total aus der Luft gegriffen ist und nicht schon als Basis ein Designfehler hat.
        Zum Thema magische Datenbank -> Trommelwirbel... es gibt eine Fallunterscheidung beim erstellen des Ausführungsplans.

        Kommentar


        • #19
          Also das mit dem LIMIT sehe ich noch anders. Evtl. bin ich da ja verkehrt gewickelt, aber nehmen wir mal an, ich möchte ein Ergebnis sortiert nach einem Feld, das nicht WHERE-Bedingung ist.
          Dann muß dies über eine Anfrage über die komplette Table erst einmal vorsortiert werden. Erst dann kommt doch LIMIT, mit dem ich bspw. sage gib mir mal nur die ersten 100.

          Wenn er nach den ersten 100 abbrechen würde, würde ich so ja nie zuverlässige Ergebnisse erhalten...
          Competence-Center -> Enjoy the Informatrix
          PHProcks!Einsteiger freundliche TutorialsPreComposed Packages

          Kommentar


          • #20
            Ich gratuliere, deine Datenbank kann zaubern.
            erc, wenn ich den zB den "einen aktuellsten Eintrag" (ORDER BY timestamp LIMIT 1) an Hand eines Timestamps haben will, muss die DB doch zuerst "intern" alle scannen und sortieren um den einen aktuellsten feststellen zu können, oder? Dh ohne dem kann die DB sonst gar nicht den einen aktuellesten finden? Ich hinterfrage es nur, ich will dir absolut nicht widersprechen.

            // EDIT: zu langsam.. im Grunde was Arne schreibt.
            The string "()()" is not palindrom but the String "())(" is.

            Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
            PHP.de Wissenssammlung | Kein Support per PN

            Kommentar


            • #21
              Da habt ihr vollkommen recht, aber wie geschreiben es gibt dabei eine Fallunterscheidung.

              PHP-Code:
              SELECT FROM foo WHERE blub 1 LIMIT 5 
              Full table scan wird mit den 5te getroffene Datensatz abgebrochen, auch wenn noch 1.000.000 Datensätze danach kommen.

              PHP-Code:
              SELECT FROM foo WHERE blub 1 ORDER BY bar LIMIT 5 
              Full table scan über die gesamte Tabelle.

              *edit* natürlich nur wenn kein Index genutzt wird...

              Kommentar


              • #22
                Ok, danke für die Aufklärung... Bin ich ja doch nicht gaaanz dooof...
                Competence-Center -> Enjoy the Informatrix
                PHProcks!Einsteiger freundliche TutorialsPreComposed Packages

                Kommentar


                • #23
                  erc, dein edit verwirrt mich grade

                  Ist das auf beide Statements bezogen, oder nur auf eines der beiden?
                  Die Jatravartiden auf Viltwodl VI können den Kram von dir auch nicht nachvollziehen

                  Kommentar

                  Lädt...
                  X