Announcement

Collapse
No announcement yet.

Stored Procedure und der Interbase

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

  • Stored Procedure und der Interbase

    Hallo liebe Leute,
    ich habe hier ein mächtiges Problem mit einer Stored Procedure. Das ganze geht, aber es dauert sehr Lange und der Server ist sehr, sehr langsam während dieser Auswertung. (Dauer ca. 5-10 Minuten)

    Ich beschreibe mal kurz was ich vorhaben.

    1.) Es gibt 8 Bereiche
    2.) Für jeden Bereich gibt es 16 Termine (8 Soll und 8 Ist Termine)

    Daraus ergibt sich eine Jahresauswertung. Ich starte die Stored Procedure also 8 mal nacheinander auf dem Server. Und erhalte jewals die daten für einen Bereich für ein Jahr. Daraus gergibt sich :

    16 Selects je Woche 52 Selects für das Jahr und das ganze 8 mal für die Bereiche
    Daraus ergibt sich die Zahl 6656 Select. Deshalb dauert es auch etwas länger und der Server ist sehr beschäftigt. Hat jemand eine bessere Lösung für dieses Problem um das ganze zu beschleunigen ? Ich weiß einfach nicht weiter.

    Hier meine Stored Procedure !!

    COMMIT WORK;
    SET AUTODDL OFF;
    SET TERM ^ ;
    /* Stored procedures */

    CREATE PROCEDURE "WOCHENAUSWERTUNGBEREICH"
    (
    "START" DATE,
    "STOPP" DATE,
    "BEREICH" NUMERIC(9, 0)
    )
    RETURNS
    (
    "TAG" DATE,
    "T1SOLL" INTEGER,
    "T2SOLL" INTEGER,
    "T3SOLL" INTEGER,
    "T4SOLL" INTEGER,
    "T5SOLL" INTEGER,
    "T6SOLL" INTEGER,
    "T7SOLL" INTEGER,
    "T8SOLL" INTEGER,
    "T1IST" INTEGER,
    "T2IST" INTEGER,
    "T3IST" INTEGER,
    "T4IST" INTEGER,
    "T5IST" INTEGER,
    "T6IST" INTEGER,
    "T7IST" INTEGER,
    "T8IST" INTEGER
    )
    AS
    BEGIN EXIT; END ^

    ALTER PROCEDURE "WOCHENAUSWERTUNGBEREICH"
    (
    "START" DATE,
    "STOPP" DATE,
    "BEREICH" NUMERIC(9, 0)
    )
    RETURNS
    (
    "TAG" DATE,
    "T1SOLL" INTEGER,
    "T2SOLL" INTEGER,
    "T3SOLL" INTEGER,
    "T4SOLL" INTEGER,
    "T5SOLL" INTEGER,
    "T6SOLL" INTEGER,
    "T7SOLL" INTEGER,
    "T8SOLL" INTEGER,
    "T1IST" INTEGER,
    "T2IST" INTEGER,
    "T3IST" INTEGER,
    "T4IST" INTEGER,
    "T5IST" INTEGER,
    "T6IST" INTEGER,
    "T7IST" INTEGER,
    "T8IST" INTEGER
    )
    AS
    Declare Variable I Integer;
    Declare Variable EndeNeu Date;
    begin
    I = 0;
    EndeNeu = Start + 6;
    while (EndeNeu <= Stopp) do
    begin
    Tag = EndeNeu;
    I = i +1;
    for Select Count(Termin1Soll)
    from Artikel
    Left Outer Join Warengruppe ON Artikel.IDBST = Warengruppe.BSTZaehler
    Where (Termin1Soll <= :EndeNeu) and (Abteilung = '1') and (Produktgruppe = '1')
    and (IDBEREICH= :BEREICH)
    into T1Soll
    do
    for Select Count(Termin1Ist)
    from Artikel
    Left Outer Join Warengruppe ON Artikel.IDBST = Warengruppe.BSTZaehler
    Where (Termin1Ist is not NULL) and (Termin1Ist <= :EndeNeu) and (Abteilung = '1') and (Produktgruppe = '1')
    and (IDBEREICH= :BEREICH)
    into T1Ist
    do
    for Select Count(Termin2Soll)
    from Artikel
    Left Outer Join Warengruppe ON Artikel.IDBST = Warengruppe.BSTZaehler
    Where (Termin2Soll <= :EndeNeu) and (Abteilung = '1') and (Produktgruppe = '1')
    and (IDBEREICH= :BEREICH)
    into T2Soll
    do
    for Select Count(Termin2Ist)
    from Artikel
    Left Outer Join Warengruppe ON Artikel.IDBST = Warengruppe.BSTZaehler
    Where (Termin2Ist is not NUll) and (Termin2Ist <= :EndeNeu) and (Abteilung = '1') and (Produktgruppe = '1')
    and (IDBEREICH= :BEREICH)
    into T2Ist
    do
    for Select Count(Termin3Soll)
    from Artikel
    Left Outer Join Warengruppe ON Artikel.IDBST = Warengruppe.BSTZaehler
    Where (Termin3Soll <= :EndeNeu) and (Abteilung = '1') and (Produktgruppe = '1')
    and (IDBEREICH= :BEREICH)
    into T3Soll
    do
    for Select Count(Termin3Ist)
    from Artikel
    Left Outer Join Warengruppe ON Artikel.IDBST = Warengruppe.BSTZaehler
    Where (Termin3Ist is not Null) and (Termin3Ist <= :EndeNeu)and (Abteilung = '1') and (Produktgruppe = '1')
    and (IDBEREICH= :BEREICH)
    into T3Ist
    do
    for Select Count(Termin4Soll)
    from Artikel
    Left Outer Join Warengruppe ON Artikel.IDBST = Warengruppe.BSTZaehler
    Where (Termin4Soll <= :EndeNeu) and

  • #2
    Hallo Tanja,

    kannst Du mal den PLAN zeigen den Interbase bei der Ausführung der SP erzeugt.

    Tschüß

    Torste

    Comment


    • #3
      Hallo Tanja,

      wie groß sind die Tabellen Warengruppe und Artikel ?
      Wenn die Abfrage so umfangreich ist, lohnt es sich die kleinen Tabellen in den Speicher zu holen und nur die Selects der Haupttabellen auf dem Server laufen zu lassen, da der PLAN eventuell zu grosse Tabellenteile mehrfach holt. Wie Torsten schrieb poste den PLAN, vielleicht laufen eineige Transfers mehrfach ab.

      Gruß Günte

      Comment

      Working...
      X