On Tue, Jan 29, 2008 at 06:49:50PM +0100, Ivan Sergio Borgonovo wrote:
> On Tue, 29 Jan 2008 17:17:39 +0000 Sam Mason <sam@samason.me.uk> wrote:
> > I've tended to do:
> >
> > SELECT *
> > FROM (
> > SELECT "complicated expression" AS pippo) x
> > WHERE pippo < 12;
>
> It risk to be much harder to rewrite for dumber DB than repeating the
> "complicated expression".
If you're worrying about how the various implementations handle the
cases then I'd suggest testing the code in each one and see how they
handle it.
> Does it come with some extra cost/improvement in term of performance
> compared to:
> - repeating the code of "complicated expression"
Most reasonable databases will expand subselects where possible.
Optimisation is always a tradeoff between different factors--one of
these being maintainability.
> - put it in a function with the proper "attributes" (I'd say
> IMMUTABLE in the above case)
That's almost never going to be a win; rewriting sub-selects is almost
always going to be easier than rewriting stored procedures.
> I've some argument for all cases but it should depend on the
> implementation.
My recommendation is generally to use the easiest solution that works
now and only worry about things when they actually fail.
Sam