Re: Volatilità funzioni

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

In response to

Responses

Browse pgsql-it-generale by date

  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