Announcement

Collapse
No announcement yet.

Access - SQL Befehl dauert sehr lange

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Access - SQL Befehl dauert sehr lange

    Hallo,

    ich habe folgenden SQL Befehl
    Code:
    INSERT INTO tbl_EngineProduction ( EngineType, Quantity, [Date], Monat, Jahr )
    SELECT MLR_neu.Typ, Count(MLR_neu.Typ) AS Anzahl, [DateKurz] AS Datum, Month([DateKurz]) AS Monat, Year([DateKurz]) AS Jahr
    FROM MLR_neu
    GROUP BY MLR_neu.Typ, [DateKurz]
    HAVING MLR_neu.Typ<>"Test" AND [Typ] &[DateKurz] Not In (SELECT [EngineType]&[Date] FROM tbl_EngineProduction);
    Dieser Befehl dauert in der Ausführung sehr lange. Kann man diese Abfrage optimieren ?

    Ich habe ein Tabelle (MLR_neu) in der ca. 45000 Einträge vorhanden sind.
    Dort ist die Spalte DateKurz und Typ vorhanden.

    10.10.2007 Test1
    10.10.2007 Test2
    10.10.2007 Test1
    ....

    In die Tabelle tbl_EngineProduction soll dann die Summe der Typen die das gleiche Datum haben eingetragen werden, aber nur wenn der eintrag noch nicht vorhanden ist.
    Die tbl_ProduktionEngine hat nach der Ausführung ca. 5000 Einträge
    Bei ersten ausführen, wenn die Zieltabelle leer ist, wird die Abfrage sofort ausgeführt. Aber beim 2te mal, wenn nur die neuesten Daten aktualisiert werden, dann dauert die Abfrage über 1 Minute.

    Bin für jeden Tip dankbar.

    Gruß Alex

  • #2
    Hallo Alex,

    1. Das HAVING besser durch eine geeignete WHERE-Klausel ersetzen. Durch HAVING werden zunächst alle Daten selektiert und dann das nicht benötigte verworfen; andersrum ist es besser.

    2. IN Abfrage sind i.d.R. inperformant, besser ebenfalls ersetzen, z.B. durch JOIN

    3. Deine CONCATs mit dem & sind prinzipiell fehlerträchtig, abhängig von den Daten. Z.B. Typ = 1 Datum = 11.1.2009 und Typ = 11 und Datum 1.1.2009 ergeben das gleiche, wenn das Datum nicht richtig mit führenden Null formatiert wird.
    A) vermeiden oder B) wenn es nicht geht, besser formatieren z.B. auch mit Trennzeichen, das in Deinen Daten nicht vorkommt (z.B. TAB)

    Versuch mal das Statement:

    [highlight=SQL]INSERT INTO tbl_EngineProduction
    (EngineType, Quantity, Date, Monat, Jahr )
    SELECT MLR_neu.Typ, Count(MLR_neu.Typ) AS Anzahl, DateKurz AS Datum,
    Month(DateKurz) AS Monat, Year(DateKurz) AS Jahr
    FROM MLR_neu
    LEFT JOIN tbl_EngineProduction AS P
    ON MLR_neu.Typ = P.EngineTyp
    AND MLR_neu.DateKurz = P.Date
    WHERE MLR_neu.Typ <> "Test"
    AND P.EngineTyp IS NULL
    GROUP BY MLR_neu.Typ, DateKurz
    [/highlight]
    Olaf Helper

    <Blog> <Xing>
    * cogito ergo sum * errare humanum est * quote erat demonstrandum *
    Wenn ich denke, ist das ein Fehler und das beweise ich täglich

    Comment


    • #3
      Vielen Dank für die schnelle Hilfe.

      Die Abfrage funktioniert einwandfrei und ist sehr schnell.

      Gruß Alex

      Comment

      Working...
      X