Announcement

Collapse
No announcement yet.

Abfrage beschleunigen....

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

  • Abfrage beschleunigen....

    Folgendes Problem :
    Es gibt die Tabellen "Artikel" und "Artikel-Historie".
    Bei jeder Preisänderung aktualisiert sich die Historie über einen Trigger selbst (VK,MwSt,Benutzer etc).

    Forlgende Abfrage :
    SELECT ARS.ArtikelNr, ARS.Bez, ARS.VKNetto, H.VKNetto, H.DT, H.VKNetto AS HistVKNetto
    FROM Artikel ARS
    LEFT JOIN Artikel-Historie AH ON AH.Hist_ID = (SELECT TOP 1 H_ID FROM Artikel-Historie WHERE VKPreis <> ARS.VKPreis AND Artikel_ID = ARS.Artikel_ID AND DT>GetDate()-30 ORDER BY DT DESC)

    Die Abfrage gibt mir die nötigen Artikel-Informationen und auch die Info ob in den Letzten 30 Tagen der Artikelpreis sich verändert hat(Datum,alter VK).
    Leider dauert die Abfrage im schnitt etwa 4 Sekunden.
    Wie kann ich die Abfrage umformulieren das ich wieder unter eine Sekunde komme ?
    Lasse ich den Join auf die Historie weg, so habe ich eine Abfragezeit von unter einer Sekunde.

    Danke im Vorraus

  • #2
    Hallo Sascha,

    eine allgemeine Antwort auf Optimierungsfragen ist immer schwer möglich, dazu hängt das ganze von zuvielen Parametern, Indizes, etc. ab.
    Ich denke mal das Subselect ist hier die Bremse. Vielleicht bringt es was, einen normalen Join zu verwenden und das Ergebnis dann mit einem IN-Select einzuschränken:

    ...LEFT JOIN Artikel-Historie AH ON AH.Artikel_ID = ARS.Artikel_ID
    WHERE AH.DT IN (SELECT MAX(INSEL.DT) FROM Artikel-Historie INSEL WHERE INSEL.VKPreis <> ARS.VKPreis AND Artikel_ID = ARS.Artikel_ID AND DT>GetDate()-30)

    Ich hoffe mal das funktioniert so Zumindest wird auf das TOP und ORDER BY verzichtet. Vorausgesetzt wird hier, das es zu einem DT pro Artikel nur einen Datensatz gibt.

    Gruß Fal
    Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

    Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

    Comment

    Working...
    X