Re: Help optimize view - Mailing list pgsql-performance

From Kevin Grittner
Subject Re: Help optimize view
Date
Msg-id 46C096DD.EE98.0025.0@wicourts.gov
Whole thread Raw
In response to Re: Help optimize view  ("Kevin Grittner" <Kevin.Grittner@wicourts.gov>)
List pgsql-performance
>>> On Mon, Aug 13, 2007 at  4:25 PM, in message
<46C0860D.EE98.0025.0@wicourts.gov>, "Kevin Grittner"
<Kevin.Grittner@wicourts.gov> wrote:
>>>> On Mon, Aug 13, 2007 at  4:00 PM, in message
> <1806D1F73FCB7F439F2C842EE0627B18065F7A86@USA0300MS01.na.xerox.net>, "Relyea,
> Mike" <Mike.Relyea@xerox.com> wrote:
>
>> From what Tom
>> says, it sounds like if I want the data returned faster I'm likely to
>> have to get beefier hardware.
>
> That's not what he suggested.  If you introduce redundancy in a controlled
> fashion, you could have a single table with an index to more quickly get you
> to the desired set of data.  That can be maintained on an ongoing basis
> (possibly using triggers) or could be materialized periodically or prior to
> running a series of reports or queries.
>
> Such redundancies violate the normalization rules which are generally used
> in database design, but some denormalization is often needed for acceptable
> performance.

One last thought regarding your table structure -- I noticed you were often
joining on column names ending in "ID" and selecting using column names
ending in "Name", where the values for the name columns were only a few
characters long.  It is not always a good idea to create a meaningless ID
number for a primary key if you have a meaningful value (or combination of
values) which would uniquely identify a row.

If you were able to use the columns in your search criteria as keys, you
would have them in the Measurements table without creating any troublesome
redundancy.  You could then add Measurements indexes on these columns, and
your query might run in under a second.

The down side of meaningful keys (oft cited by proponents of the technique)
is that if you decide that everything with an AnalysisModuleName" name of
'NMF' should now be named 'NMX', you would have to update all rows which
contain the old value.  To be able to do this safely and reliably, you would
want to use DOMAIN definitions rigorously.  If you link through meaningless
ID numbers (and what would be the point of changing those?) you can change
'NMF' to 'NMX' in one place, and everything would reflect the new value,
since it would always join to one place for those characters.

-Kevin



pgsql-performance by date:

Previous
From: Tom Lane
Date:
Subject: Re: [HACKERS] Proposal: Pluggable Optimizer Interface
Next
From: Josh Berkus
Date:
Subject: Re: [HACKERS] Proposal: Pluggable Optimizer Interface