Ankündigung

Einklappen
Keine Ankündigung bisher.

subselects soooo langsam? (mysql 4)

Einklappen

Neue Werbung 2019

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

  • subselects soooo langsam? (mysql 4)

    Hallo,
    ich versuche ein paar sql-statements zu optimieren.
    dabei ist mir aufgefallen, dass subselects doch _extrem_ langsam sind.

    ich habe mal 2 statements erstellt und die das selbe ergebnis zurückliefern.
    In der Art wie:
    Code:
    Select b.* from details b
    where ref_id in 
    (
    	select id from users where user_id = 12345
    )
    und
    Code:
    Select b.* from (
    select id from users where user_id = 12345
    ) tempTable
    inner join details b on b.ref_id=tempTable.id
    das Ergebnis ist echt verblüffend (detailTabelle: 150000 Datensätze, UserTabelle: 86000 datensätze):
    Die erste Abfrage (Subselect) benötigt stolze 2,5 sek,
    die 2. Abfrage mit der "temporären" tabelle + join nur 0,001 sekunden.

    Kann jemand erklären wieso der unterschied soo riesig ist.

    Gibt es evtl. noch paar tipps wie man statements optimieren kann (sowas wie "keine Subselects" ) ?

  • #2
    Für jeden "äusseren" Datensatz wird das "innere" Select neu ausgeführt!

    Im 2. Beispiel wird eine temporäre Tabelle verwendet, die für den äusseren Select "dauerhaft" zur Verfügung steht (und nur 1 Mal erstellt wird).
    Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

    Kommentar


    • #3
      Hallo,
      gilt das nur für MySQL, oder auch für (alle) anderen Datenbanken. (MS-SQL, Oracle,...) ?

      Kommentar


      • #4
        Prinzipiell gilt das für alle Datenbanken, allerdings könnten sich die internen Details unterscheiden.
        Manche Datenbank mag so schlau sein, den inneren Select zu cachen und darauf zurückzugreifen (aber nur, wenn keine dynamischen Bezüge zum äusseren Query im inneren verwendet werden).
        Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

        Kommentar


        • #5
          gilt das nur für MySQL
          Gilt was?
          [COLOR="#F5F5FF"]--[/COLOR]
          [COLOR="Gray"][SIZE="6"][FONT="Georgia"][B]^^ O.O[/B][/FONT] [/SIZE]
          „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
          [URL="http://www.php.de/javascript-ajax-und-mehr/107400-draggable-sorttable-setattribute.html#post788799"][B]Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“[/B][/URL][/COLOR]
          [COLOR="#F5F5FF"]
          --[/COLOR]

          Kommentar

          Lädt...
          X