Composite index and min()

From: James Sewell <james(dot)sewell(at)lisasoft(dot)com>
To: PostgreSQL-development <pgsql-hackers(at)postgresql(dot)org>
Subject: Composite index and min()
Date: 2015-02-26 07:34:34
Message-ID: CANkGpBuBSuR6X0=j4zPz=4XZQqHD_MPLx+pTQuGKm19Akhadrg@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general pgsql-hackers

Hello,

I have the following table:

\d a
Table "phxconfig.a"
Column | Type | Modifiers
---------------+---------+-----------
phx_run_id | integer |
cell_id | integer |
Indexes:
"a_phx_run_id_cell_id_idx" btree (phx_run_id, cell_id)

When I use a min() query I get the following plans:

test=# explain select min(phx_run_id) from a;
QUERY PLAN
-------------------------------------------------------------------------------------------------------
Result (cost=0.22..0.23 rows=1 width=0)
InitPlan 1 (returns $0)
-> Limit (cost=0.14..0.22 rows=1 width=4)
-> Index Only Scan using a_phx_run_id_cell_id_idx on a
(cost=0.14..7.89 rows=100 width=4)
Index Cond: (phx_run_id IS NOT NULL)

test=# explain select min(cell_id) from a;
QUERY PLAN
---------------------------------------------------------
Aggregate (cost=2.25..2.26 rows=1 width=4)
-> Seq Scan on a (cost=0.00..2.00 rows=100 width=4)

Can anyone comment on why this happens?

The index kicks in when I do an explicit cell_id comparison. These are
large tables, and they are in a partition layout so it really hurts when I
do the min call on the parent table.

Cheers,

James Sewell,
PostgreSQL Team Lead / Solutions Architect
______________________________________

Level 2, 50 Queen St, Melbourne VIC 3000

*P *(+61) 3 8370 8000 *W* www.lisasoft.com *F *(+61) 3 8370 8099

--

------------------------------
The contents of this email are confidential and may be subject to legal or
professional privilege and copyright. No representation is made that this
email is free of viruses or other defects. If you have received this
communication in error, you may not copy or distribute any part of it or
otherwise disclose its contents to anyone. Please advise the sender of your
incorrect receipt of this correspondence.

Responses

Browse pgsql-general by date

  From Date Subject
Next Message Jim Nasby 2015-02-26 08:27:46 Re: Composite index and min()
Previous Message Sreerama Manoj 2015-02-26 06:47:37 Create Virtual Indexes on Postgres

Browse pgsql-hackers by date

  From Date Subject
Next Message Jim Nasby 2015-02-26 08:20:21 Re: Partitioning WIP patch
Previous Message Fujii Masao 2015-02-26 06:49:06 Re: Add generate_series(numeric, numeric)