Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#3

AW: Firebird 3.0 - Stored Functions & Schlüsselwort deterministic

  Alt 23. Mai 2017, 16:03
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
$2B or not $2B

Geändert von himitsu (23. Mai 2017 um 16:24 Uhr)
  Mit Zitat antworten Zitat