Adrian Klaver <adrian.klaver@xxxxxxxxxxx> writes: > Took liberty of reformatting the above here: > ... > FROM > sym_data d INNER JOIN sym_data_gap g ON g.status = 'GP' > AND d.data_id BETWEEN g.start_id > AND g.end_id > WHERE > d.channel_id = 'sale_transaction' > ORDER BY > d.data_id ASC; > The thing that stands out to me is that I do not see that sym_data and > sym_data_gp are actually joined on anything. The "d.data_id BETWEEN g.start_id AND g.end_id" part is a join condition ... but not one that can be handled by either hash or merge join, because those require simple equality join conditions. So the nestloop plan shown here is really about as good as you're going to get without redesigning the query and/or the data representation. It looks like the bitmap heap scan generally returns exactly one row for each outer row, which makes me wonder if the BETWEEN couldn't be replaced with some sort of equality. But that might take some rethinking of the data. regards, tom lane -- Sent via pgsql-performance mailing list (pgsql-performance@xxxxxxxxxxxxxx) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-performance