Einige
DBMS bieten es an, dass man SPs entsprechend markieren kann, wenn sie bestimmte Bedingungen erfüllen, wie Beispielsweise
* Result ist immer NULL, wenn mindestens ein Parameter NULL ist -> ist ein Parameter NULL, braucht die SP also garnicht erst ausgeführt werden
* SP verändert keine Daten in der
DB (macht nur SELECTs, aber kein INSERT/UPDATE/DELETE)
* SP gibt immer das selbe Ergebnis zurück, bei gleichen Parametern (während dieser Abfrage, innerhalb der Connection/Session oder gar für die ganze Laufzeit der
DB)
* ...
So kann das
DBMS seine Arbeit besser steuern, indem es z.B. Ergebnisse cached und die SP seltener ausführt.
Du hast z.B. eine Funktion im SELECT/WHERE, die für zu einem Wert immer den gleichen anderen zugehörigen Wert holt.
SELECT id, xyz, GetValueFromXyz(xyz) FROM table WHERE ...
Hast'e jetzt deine SP als DETERMINISTIC markiert, dann kann
FB den aufruf optimieren, für den Fall die Funktion wird mehrmals mit dem selben Parametern aufgerufen.
Normal bräuchte dieses SELECT 20 Sekunden und deterministisch nur 5.
SQL-Code:
CREATE FUNCTION TestDeterm(param1
INTEGER) RETURNS
INTEGER DETERMINISTIC
AS
BEGIN
Sleep(1000);
-- k.A. wie man das in FB macht
RETURN param1 * 2;
END;
SELECT TestDeterm(x)
FROM (
VALUES
(1), (2), (3), (4), (5),
(1), (2), (3), (4), (5),
(1), (2), (3), (4), (5),
(1), (2), (3), (4), (5)
)
AS temp (x)
anderes Beispiel:
IMMUTABLE | STABLE | VOLATILE | [ NOT ] LEAKPROOF
https://www.postgresql.org/docs/curr...efunction.html