Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Abfrage über 2 Tabellen dauert zu lange

Einklappen

Neue Werbung 2019

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

  • [Erledigt] Abfrage über 2 Tabellen dauert zu lange

    Ich habe 2 Tabellen:
    tab.rechnungsdetail enthält 130.000 Datensätze und
    tab.rechnungen enthält 15.000.

    Die folgende Abfrage überschreitet natürlich locker 60 sek. und führt zum Abbruch.
    Wie könnte ich das optimieren?

    Code:
    $rechnungen_19 = mysql_query("
    SELECT tab_rechnungen.RNR, 
    SUM(tab_rechnungsdetails.VK_PREIS) AS NETTOSUMME, 
    MWST FROM tab_rechnungsdetails
    Inner Join tab_rechnungen ON tab_rechnungen.RNR = tab_rechnungsdetails.RNR 
    WHERE tab_rechnungsdetails.MWST = '19'
    AND tab_rechnungsdetails.VK_PREIS <> '0' 
    AND tab_rechnungen.JAHR = '2010' 
    AND tab_rechnungen.MONAT LIKE '5'
    AND (tab_rechnungen.UEBERSCHR LIKE 'rechnung' 
    OR tab_rechnungen.UEBERSCHR = '') 
    ORDER BY tab_rechnungen.JAHR DESC, 
    tab_rechnungen.MONAT DESC,
    tab_rechnungen.LFDNR DESC") 
    or die(mysql_error());
    $summe_19 = mysql_fetch_array($rechnungen_19);
    if ($summe_19['NETTOSUMME'] > '0')  {
      echo 'Nettoumsatz (ohne KV): '.number_format(round($summe_19['NETTOSUMME'],2), 2, ',', '.').' Euro<br>
      UST darauf: '.(number_format(round($summe_19['NETTOSUMME'],2), 2, ',', '.')*19/100).' Euro<br>';
    }
    edit: Hab mittlerweile rausgefunden, das die SUM Funktion den Datenstau verursacht.
    Ich versuch die Daten in ein Araay zu packen und danach die Summe zu bilden.
    Es sei denn, jemand hat eine bessere Idee?

  • #2
    Erster Schritt: EXPLAIN nutzen, und schauen, wo's hakt.
    Zweiter Schritt: Sinnvolle Indexe setzen/ergänzen.
    [SIZE="1"]RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?[/SIZE]

    Kommentar


    • #3
      Danke,

      hätte in diesem Fall wohl nicht ausgereicht.
      Ich hab es jetzt doch mit einem array gemacht, aus dem ich die Summe bilde.
      Läuft fast in Echtzeit, trotz der großen Datenmengen.
      Code:
      $rechnungen_19 = mysql_query("
      SELECT tab_rechnungen.RNR, 
      tab_rechnungsdetails.VK_PREIS, 
      MWST FROM tab_rechnungsdetails
      Inner Join tab_rechnungen ON tab_rechnungen.RNR = tab_rechnungsdetails.RNR 
      WHERE tab_rechnungsdetails.MWST = '19'
      AND tab_rechnungsdetails.VK_PREIS <> '0' 
      AND tab_rechnungen.JAHR = '2010' 
      AND tab_rechnungen.MONAT LIKE '5'
      AND (tab_rechnungen.UEBERSCHR LIKE 'rechnung' 
      OR tab_rechnungen.UEBERSCHR = '') 
      ORDER BY tab_rechnungen.JAHR DESC, 
      tab_rechnungen.MONAT DESC,
      tab_rechnungen.LFDNR DESC") 
      or die(mysql_error());
      while ($summe_19    = mysql_fetch_array($rechnungen_19))  {
        $arraysumme_19[]  = $summe_19['VK_PREIS'];
      }
      $nettosumme_19      = array_sum($arraysumme_19);
      echo number_format($nettosumme_19, 2, ',', '.');

      Kommentar


      • #4
        läuft fast in echtzeit, trotz der großen datenmengen.
        wtf?
        Viele Grüße,
        Dr.E.

        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        1. Think about software design [B]before[/B] you start to write code!
        2. Discuss and review it together with [B]experts[/B]!
        3. Choose [B]good[/B] tools (-> [URL="http://adventure-php-framework.org/Seite/088-Why-APF"]Adventure PHP Framework (APF)[/URL][URL="http://adventure-php-framework.org"][/URL])!
        4. Write [I][B]clean and reusable[/B][/I] software only!
        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

        Kommentar

        Lädt...
        X