From: | Heikki Linnakangas <hlinnakangas(at)vmware(dot)com> |
---|---|
To: | <rafal(at)conjur(dot)net>, <pgsql-bugs(at)postgresql(dot)org> |
Subject: | Re: BUG #11559: ANY array filters should make use of GIN indexes |
Date: | 2014-10-05 07:31:26 |
Message-ID: | 5430F3CE.6070603@vmware.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-bugs |
On 10/03/2014 06:16 PM, rafal(at)conjur(dot)net wrote:
> Consider schema:
>
> create table arr_test(strs text[]);
> insert into arr_test select array[i, i+1] from generate_series(1, 1000) i;
> create index strs_idx on arr_test using gin(strs);
>
> In this schema, query
>
> select * from arr_test where '2' = any(strs);
>
> yields a plan
>
> QUERY PLAN
> ----------------------------------------------------------
> Seq Scan on arr_test (cost=0.00..31.50 rows=2 width=37)
> Filter: ('2'::text = ANY (strs))
>
> yet (AFAICT) equivalent query
>
> select * from arr_test where array['2'] && strs;
>
> uses the index:
>
> QUERY PLAN
> -----------------------------------------------------------------------
> Bitmap Heap Scan on arr_test (cost=8.02..13.21 rows=2 width=37)
> Recheck Cond: ('{2}'::text[] && strs)
> -> Bitmap Index Scan on strs_idx (cost=0.00..8.02 rows=2 width=0)
> Index Cond: ('{2}'::text[] && strs)
>
> In one of our databases with ~150k rows this makes for a difference in
> speed of four orders of magnitude.
>
>
> Is it possible to have the optimizer automatically use index for ANY queries
> like that? Or are these queries inequivalent in some non-straightforward
> manner?
I think the queries are indeed equivalent. The planner just isn't smart
enough to do the transformation automatically.
(this is not a bug, just a missing feature)
- Heikki
From | Date | Subject | |
---|---|---|---|
Next Message | kyanh | 2014-10-06 04:25:24 | BUG #11595: PostgreSQL applies intermediate configuration files |
Previous Message | rafal | 2014-10-03 15:16:26 | BUG #11559: ANY array filters should make use of GIN indexes |