I have a handful of queries in the following general form that I can't seem to 
optimize any further (same results on 9.3, 9.4, 9.5)

I'm wondering if anyone might have a suggestion, or if they're done.

The relevant table structure:

        t_a2b
                a_id INT references t_a(id)
                b_id INT references t_b(id)
                col_a

        t_a
                id INT
                col_1 INT
                col_2 BOOL

The selects query the association table (t_a2b) and join in a related table 
(t_a) for some filtering.

In effort of simplifying the work, I've created indexes on t_a that have all 
the related columns.

        CREATE INDEX test_idx ON t_a(col_1, id) WHERE col_2 IS NOT FALSE;
        CREATE INDEX test_idx__a ON t_a(col_1, id) WHERE col_2 IS NOT FALSE;

postgres will query test_idx__a first (yay!) but then does a bitmap heap scan 
on t_a, and uses the raw t_a for the hash join.  

I don't actually need any information from t_a - it's just there for the 
filtering, and ideally postgres would just use the index.

I thought this might have been from using a partial index, but the same results 
happen with a full index.  I just can't seem to avoid this hash join against 
the full table.

anyone have a suggestion?


example query

        SELECT t_a2b.b_id AS b_id,
                   count(t_a2b.b_id) AS counted
        FROM t_a2b 
        WHERE 
                  t_a2b.col_a = 1
                  AND
                  t_a.col_1 = 730
                  AND
                  t_a.col_2 IS NOT False
        GROUP BY t_a2b.b_id
        ORDER BY        counted DESC,
                                t_a2b.b_id ASC                                  
                                                                                
                                                                                
                                                   



-- 
Sent via pgsql-general mailing list (pgsql-general@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-general

Reply via email to