explain.depesz.com

PostgreSQL's explain analyze made readable

Result: FXxe

Settings
# exclusive inclusive rows x rows loops node
1. 0.000 0.000 ↓ 0.0

Nested Loop Left Join (cost=17,622.76..1,503,552.45 rows=12,502 width=79) (actual rows= loops=)

  • Join Filter: (((pedigree_acl.ident)::text = (boards_all_forks_aireon_billing_matview.reg)::text) OR (((pedigree_acl.ident)::text ~~ '%.*'::text) AND (substr((pedigree_acl.ident)::text, 1, 3) = (boards_all_forks_aireon_billing_matview.ident)::text)))
2. 0.000 0.000 ↓ 0.0

Seq Scan on pedigree_acl (cost=0.00..5,887.07 rows=12,502 width=73) (actual rows= loops=)

  • Filter: ((enabled IS TRUE) AND (deleted IS NULL) AND (((pedigree_mask)::text = 'aireon'::text) OR ((pedigree_mask)::text = '*'::text)))
3. 0.000 0.000 ↓ 0.0

Materialize (cost=17,622.76..17,754.28 rows=5,261 width=10) (actual rows= loops=)

4. 0.000 0.000 ↓ 0.0

HashAggregate (cost=17,622.76..17,675.37 rows=5,261 width=10) (actual rows= loops=)

  • Group Key: boards_all_forks_aireon_billing_matview.ident, boards_all_forks_aireon_billing_matview.reg
5. 0.000 0.000 ↓ 0.0

Bitmap Heap Scan on boards_all_forks_aireon_billing_matview (cost=12,336.56..17,596.01 rows=5,350 width=10) (actual rows= loops=)

  • Recheck Cond: (date_trunc('month'::text, (date)::timestamp without time zone) = date_trunc('month'::text, (now() - '1 mon'::interval)))
  • Filter: ((hashed SubPlan 1) OR (hashed SubPlan 2))
6. 0.000 0.000 ↓ 0.0

Bitmap Index Scan on boards_all_forks_aireon_billing_matview_date_idx (cost=0.00..75.93 rows=7,133 width=0) (actual rows= loops=)

  • Index Cond: (date_trunc('month'::text, (date)::timestamp without time zone) = date_trunc('month'::text, (now() - '1 mon'::interval)))
7.          

SubPlan (for Bitmap Heap Scan)

8. 0.000 0.000 ↓ 0.0

Seq Scan on pedigree_acl pedigree_acl_1 (cost=0.00..5,887.07 rows=12,544 width=6) (actual rows= loops=)

  • Filter: ((enabled IS TRUE) AND (((pedigree_mask)::text = 'aireon'::text) OR ((pedigree_mask)::text = '*'::text)))
9. 0.000 0.000 ↓ 0.0

Seq Scan on pedigree_acl pedigree_acl_2 (cost=0.00..6,340.81 rows=25 width=32) (actual rows= loops=)

  • Filter: ((enabled IS TRUE) AND ((ident)::text ~~ '%.*'::text) AND (((pedigree_mask)::text = 'aireon'::text) OR ((pedigree_mask)::text = '*'::text)))