From: | Craig Ringer <ringerc(at)ringerc(dot)id(dot)au> |
---|---|
To: | Merlin Moncure <mmoncure(at)gmail(dot)com> |
Cc: | Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>, Adam Mackler <adammackler(at)gmail(dot)com>, pgsql-general(at)postgresql(dot)org |
Subject: | Re: Views versus user-defined functions: formatting, comments, performance, etc. |
Date: | 2012-08-18 08:25:44 |
Message-ID: | 502F5188.9080208@ringerc.id.au |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-general |
On 08/18/2012 06:49 AM, Merlin Moncure wrote:
> For various reasons, this often goes the wrong way. Views are often
> the right way to go.
Indeed. I've had queries speed up *hundreds* of times when I convert a
function the planner didn't seem to want to inline into a view it can
push conditions down into.
The key thing to remember with views is that - unlike CTE "WITH"
expressions - they generally aren't fully evaluated to get all their
rows if most of them aren't needed. The query optimiser can typically
push filters (like "where customer_id = 4" or whatever) down into the
index- and table-scans used by the view, reducing the amount of data
that has to be processed.
That's not always the case, so use of EXPLAIN ANALYZE and some tweaking
of a view or query that uses a view is sometimes necessary. Mostly it
"just works" though.
--
Craig Ringer
From | Date | Subject | |
---|---|---|---|
Next Message | Craig Ringer | 2012-08-18 08:29:22 | Re: Schemas vs partitioning vs multiple databases for archiving |
Previous Message | John R Pierce | 2012-08-18 08:13:40 | Re: Schemas vs partitioning vs multiple databases for archiving |