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
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
Comment