Hallo Zusammen,
bei den beiden Nachstehenden Beispielen, liefert das Select auf die Rechnungen genau einen record.
Das Update aktualisiert auch nur den einen Record. Allerdings wird in beiden Beispielen die komplette Datenmenge von 500.000 Adressen durchlaufen. Das dauert natürlich. Das sehe ich auch in IBExpert unter Performance Analysis.
Code:
UPDATE ADRESSEN A
SET A.AKTIV = 1
WHERE EXISTS (SELECT NULL
FROM RECHNUNGEN R
WHERE R.RECHNUNGSNR = 1
AND R.ADRESSID = A.ADRESSID
);
oder
Code:
UPDATE ADRESSEN A
SET A.AKTIV = 1
WHERE A.ADRESSID IN (SELECT ADRESSID
FROM RECHNUNGEN R
WHERE R.RECHNUNGSNR = 1
);
Hat jemand eine Idee wie man das verhindern kann?
Ich sehr nur eine Möglichkeit über Execute Block das funktioniert auch Pfeil schnell:
Code:
EXECUTE BLOCK (IRECHNUNGSNR TYPE OF COLUMN RECHNUNGEN.RECHNUNGSNR = :RECHNUNGSNR)
AS
DECLARE VARIABLE ADRESSID TYPE OF COLUMN ADRESSEN.ADRESSID;
BEGIN
FOR SELECT ADRESSID
FROM RECHNUNGEN R
WHERE R.RECHNUNGSNR = :IRECHNUNGSNR
INTO :ADRESSID
DO
BEGIN
UPDATE ADRESSEN A
SET A.AKTIV = 1
WHERE A.ADRESSID = :ADRESSID;
END
SUSPEND;
END