Re: Incorrect index being used

From: Jesse Long <jpl(at)unknown(dot)za(dot)net>
To: pgsql-general(at)postgresql(dot)org
Subject: Re: Incorrect index being used
Date: 2013-10-14 07:51:04
Message-ID: 525BA268.4000900@unknown.za.net
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

On 12/10/2013 01:45, BladeOfLight16 wrote:
> On Fri, Oct 11, 2013 at 9:32 AM, Jesse Long <jpl(at)unknown(dot)za(dot)net
> <mailto:jpl(at)unknown(dot)za(dot)net>> wrote:
>
> explain select * from archive_document_index where node_id = 29
> and value = 'BSH70002152';
> QUERY PLAN
> --------------------------------------------------------------------------------------------------------------------------
> Index Scan using archive_document_index_node_id_value_idx on
> archive_document_index (cost=0.57..36.13 rows=14 width=33)
> Index Cond: ((node_id = 29) AND ((value)::text =
> 'BSH70002152'::text))
> (2 rows)
>
>
> I believe that this is what Tom is suggesting:
>
> SELECT *
> FROM ARCHIVE_DOCUMENT AS ad
> WHERE ad.NODE_ID = 29
> AND ad.ARCHIVE_DATE >= '2013-07-08 18:28:00'
> AND EXISTS (SELECT *
> FROM ARCHIVE_DOCUMENT_INDEX AS adi
> WHERE adi.ARCHIVE_ID = ad.ID
> AND adi.NODE_ID = ad.NODE_ID
> AND (adi.VALUE = 'BSH70002152' OR adi.VALUE = 'TC212592')
> )
> ORDER BY ad.ARCHIVE_DATE DESC
> LIMIT 10;
>
> Forgive my changing of the aliases. I found names like r0 difficult to
> interpret easily.
>
> This is a much simpler query since it only requires one subselect, and
> I believe Tom is suggesting that this query may be able to make use of
> the index or at least find some more efficient plan. How does this
> perform?

Indeed it does perform very much better. With the modified query the
plan and the execution time are excellent.

However, my previous question remains - in the original query plan,
there are two hash tables being populated using seqscan + filter. During
each seqscan, over 95 million records were wastefully read. I think that
this could have been dramatically improved by using an index scan. Am I
mistaken? Is it a optimisation that could be implemented but has not
been implemented yet? Is it a bug?

Thanks,
Jesse

In response to

Browse pgsql-general by date

  From Date Subject
Next Message Alban Hertroys 2013-10-14 09:49:10 Re: trigger without trigger call
Previous Message Pavel Stehule 2013-10-14 07:06:09 Re: trigger without trigger call