pavan95 wrote > *Query*: > > explain select ... from tms_timesheet_details, tms_wsr_header header > where wsr_header_id=header.id and work_order_no != 'CORPORATE'; > > QUERY PLAN > --------------------------------------------------------------------------------------------- > Aggregate (cost=9868.91..9868.92 rows=1 width=8) > -> Hash Join (cost=608.27..5647.67 rows=70354 width=8) > Hash Cond: (tms_timesheet_details.wsr_header_id = header.id) > -> Seq Scan on tms_timesheet_details (cost=0.00..3431.14 > rows=72378 width=12) > Filter: ((work_order_no)::text <> 'CORPORATE'::text) > -> Hash (cost=399.23..399.23 rows=16723 width=4) > -> Seq Scan on tms_wsr_header header (cost=0.00..399.23 > rows=16723 width=4) > (7 rows) > > > -- > Sent from: > http://www.postgresql-archive.org/PostgreSQL-performance-f2050081.html Why is the table tms_wsr_header in the from clause as it is not used in the select columns? A simple "wsr_header_id is not null" would do the same as this is a foreign key into the tms_wsr_header table. An index with on tms_timesheet_details.id "where wsr_header_id is not null" might then speed the query up if there were significant numbers of rows with a null wsr_header_id. Cheers Matthew -- Sent from: http://www.postgresql-archive.org/PostgreSQL-performance-f2050081.html