Subject: Understanding how partial indexes work?
From: tgl@sss.pgh.pa.us (Tom Lane)
Date: 12/6/2007 10:39:20 AM
"Chris Velevitch" <chris.velevitch@gmail.com> writes:
> I have a query on a table:-
> X between k1 and k2 or X < k1 and Y <> k3
> where k1, k2, k3 are constants.
> How would this query work, if I created an index on X and a partial
> index on X where Y <> k3?
Is it worth the trouble? You didn't mention the statistics involved,
but ordinarily I'd think a non-equal condition is too nonselective
to justify the cost of maintaining an extra index.
The real problem here is that "X < k1" is probably too nonselective
as well, which will likely lead the planner to decide that a plain
seqscan is the cheapest solution. In principle the above could be
done with a BitmapOr of two indexscans on X, but unless the constants
are such that only a small fraction of rows are going to be selected,
it's likely that a seqscan is the way to go.
regards, tom lane
---------------------------(end of broadcast)---------------------------
TIP 6: explain analyze is your friend
Subject: Understanding how partial indexes work?
From: tgl@sss.pgh.pa.us (Tom Lane)
Date: 12/6/2007 7:32:27 PM
"Chris Velevitch" <chris.velevitch@gmail.com> writes:
> On Dec 7, 2007 2:39 AM, Tom Lane <tgl@sss.pgh.pa.us> wrote:
>> Is it worth the trouble? You didn't mention the statistics involved,
>> but ordinarily I'd think a non-equal condition is too nonselective
>> to justify the cost of maintaining an extra index.
> Yes, I did neglect to mention the stats. Y is the status of the record
> which represents the life cycle of the record starting at zero and
> ending up at k3. So basically the query would retrieving and the
> partial index will indexing records which aren't at their end of life.
> So the number of records where Y <> k3 will be low and the number of
> records where Y = k3 will be growing over time.
OK, in that case the partial index might be worth trying.
regards, tom lane
---------------------------(end of broadcast)---------------------------
TIP 3: Have you checked our extensive FAQ?
http://www.postgresql.org/docs/faq
|