From: | Gianni Ciolli <gianni(dot)ciolli(at)2ndquadrant(dot)it> |
---|---|
To: | pgsql-it-generale <pgsql-it-generale(at)postgresql(dot)org> |
Subject: | Re: Volatilità funzioni |
Date: | 2009-06-13 20:33:45 |
Message-ID: | 20090613203345.GB3498@fune |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-it-generale |
On Sat, Jun 13, 2009 at 03:13:53PM +0200, Giorgio Valoti wrote:
>
> Il giorno 11/giu/09, alle ore 19:50, Gianni Ciolli ha scritto:
>> La documentazione in realtà è abbastanza precisa:
>>
>> "A VOLATILE function can do anything, including modifying the
>> database. ..."
>>
>> "A STABLE function cannot modify the database ..."
>>
>> "An IMMUTABLE function cannot modify the database and ..."
>>
>> Quindi dato che la funzione in oggetto modifica il database (un DELETE
>> è una modifica) deve essere VOLATILE.
>
> Grazie, non mi era chiara la distinzione fra effetto e contenuto della
> funzione, in relazione alla sua volatilità.
In effetti le parole VOLATILE, STABLE, IMMUTABLE non suggeriscono
immediatamente il significato SQL, contrariamente a quanto succede con
la gran parte delle parole chiave SQL (ad esempio INSERT, DELETE,
UPDATE,...)
La ragione per cui si parla della volatilità delle funzioni è di
aiutare la pianificazione delle query. Ecco un esempio sciocco, che
però può forse chiarire meglio cosa intendo dire.
Sia t una tabella con un milione di righe, sia f una funzione volatile
e sia g una funzione non volatile. Scrivendo la query
SELECT g(1),x FROM t;
il planner è costretto a calcolare g(1) un milione di volte, mentre in
SELECT f(1),x FROM t;
il planner sa che, se lo ritiene opportuno, può calcolare f(1) una
volta sola e copiare il risultato in tutte le 1000000 righe;
ovviamente lo farà solo se prevederà di risparmiare tempo, ad esempio
se f() è una funzione che consuma molto tempo. Infatti nel creare le
funzioni è possibile anche specificare il tempo medio di esecuzione.
Per maggiori dettagli guarda la documentazione, che è molto chiara.
Ciao
Dr. Gianni Ciolli - 2ndQuadrant Italia
PostgreSQL Training, Services and Support
gianni(dot)ciolli(at)2ndquadrant(dot)it | www.2ndquadrant.it
From | Date | Subject | |
---|---|---|---|
Next Message | Gianni Ciolli | 2009-06-13 20:41:12 | Re: [pgsql-it-generale] Volatilità funzioni |
Previous Message | gabriele.bartolini | 2009-06-12 11:14:38 | Novità SQL in PostgreSQL 8.4 |