I have a PostgreSQL database with a master table and 2 child tables. My master table: CREATE TABLE test ( id serial PRIMARY KEY, date timestamp without time zone ); CREATE INDEX ON test(date); My child tables: CREATE TABLE test_20150812 ( CHECK ( date >= DATE '2015-08-12' AND date < DATE '2015-08-13' ) ) INHERITS (test); CREATE TABLE test_20150811 ( CHECK ( date >= DATE '2015-08-11' AND date < DATE '2015-08-12' ) ) INHERITS (test); CREATE INDEX ON test_20150812(date); CREATE INDEX ON test_20150811(date); When I execute query like: select * from test_20150812 where date > '2015-08-12' order by date desc; It returns very quickly (20-30 miliseconds). `EXPLAIN` output: Limit (cost=0.00..2.69 rows=50 width=212) -> Index Scan Backward using test_20150812_date_idx on test_20150812 (cost=0.00..149538.92 rows=2782286 width=212) Index Cond: (date > '2015-08-12 00:00:00'::timestamp without time zone) However if I execute query like: select * from test where date > '2015-08-12' order by date desc; It takes a long time (10-15 seconds). `EXPLAIN` output: Limit (cost=196687.06..196687.19 rows=50 width=212) -> Sort (cost=196687.06..203617.51 rows=2772180 width=212) Sort Key: public.test.date -> Result (cost=0.00..104597.24 rows=2772180 width=212) -> Append (cost=0.00..104597.24 rows=2772180 width=212) -> Seq Scan on test (cost=0.00..0.00 rows=1 width=1857) Filter: (date > '2015-08-12 00:00:00'::timestamp without time zone) -> Seq Scan on test_20150812 test (cost=0.00..104597.24 rows=2772179 width=212) Filter: (date > '2015-08-12 00:00:00'::timestamp without time zone) `constraint_exclusion` is set to `ON` in my `postgresql.conf`. Therefore it should only be executed on `test_20150812`. I see that, if a query is executed on master table, indices are never used. How can I improve it? I want to make all my queries on my master table. When querying for a specific date I expect no performance difference between querying on the master table or the child table. **edit:** My postgres version: postgres (PostgreSQL) 9.0.12 After Erwins' comment I tried and it works fine. However I see another problem; I use it with collumn which named coll; CREATE TABLE test2 ( id serial PRIMARY KEY, coll character varying(32), ts timestamp without time zone ); CREATE INDEX ON test2(date); CREATE TABLE test2_20150812 ( CHECK ( ts >= timestamp '2015-08-12' AND ts < timestamp '2015-08-13' ) ) INHERITS (test2); CREATE TABLE test2_20150811 ( CHECK ( ts >= timestamp '2015-08-11' AND ts < timestamp '2015-08-12' ) ) INHERITS (test2); CREATE INDEX ON test2_20150812(ts); CREATE INDEX ON test2_20150811(ts); EXPLAIN select * from test2 WHERE ts >= '2015-08-11' ORDER BY ts DESC; output is; Sort (cost=76.86..78.64 rows=715 width=46) Sort Key: public.test2.ts -> Result (cost=0.00..42.96 rows=715 width=46) -> Append (cost=0.00..42.96 rows=715 width=46) -> Seq Scan on test2 (cost=0.00..0.00 rows=1 width=46) Filter: (ts >= '2015-08-11 00:00:00'::timestamp without time zone) -> Bitmap Heap Scan on test2_20150812 test2 (cost=7.02..21.48 rows=357 width=46) Recheck Cond: (ts >= '2015-08-11 00:00:00'::timestamp without time zone) -> Bitmap Index Scan on test2_20150812_ts_idx (cost=0.00..6.93 rows=357 width=0) Index Cond: (ts >= '2015-08-11 00:00:00'::timestamp without time zone) -> Bitmap Heap Scan on test2_20150811 test2 (cost=7.02..21.48 rows=357 width=46) Recheck Cond: (ts >= '2015-08-11 00:00:00'::timestamp without time zone) -> Bitmap Index Scan on test2_20150811_ts_idx (cost=0.00..6.93 rows=357 width=0) Index Cond: (ts >= '2015-08-11 00:00:00'::timestamp without time zone) However if I change column coll and do these steps again; CREATE TABLE test2 ( id serial PRIMARY KEY, coll character varying(255), ts timestamp without time zone ); Explain output is; Sort (cost=42.47..43.18 rows=287 width=157) Sort Key: public.test2.ts -> Result (cost=0.00..30.75 rows=287 width=157) -> Append (cost=0.00..30.75 rows=287 width=157) -> Seq Scan on test2 (cost=0.00..0.00 rows=1 width=157) Filter: (ts >= '2015-08-11 00:00:00'::timestamp without time zone) -> Seq Scan on test2_20150812 test2 (cost=0.00..15.38 rows=143 width=157) Filter: (ts >= '2015-08-11 00:00:00'::timestamp without time zone) -> Seq Scan on test2_20150811 test2 (cost=0.00..15.38 rows=143 width=157) Filter: (ts >= '2015-08-11 00:00:00'::timestamp without time zone) I dont understand why postgresql do that. Is there any way for using childs' index with column?