explain.depesz.com

PostgreSQL's explain analyze made readable

Result: wP1R

Settings
# exclusive inclusive rows x rows loops node
1. 0.000 0.000 ↑ 151.4 65 1

Partial HashAggregate (cost=26,971.99..27,070.41 rows=9,842 width=52) (actual rows=65 loops=1)

  • Output: order_item.status, product.data_processor_id, data_processor.name, PARTIAL max("order".created)
  • Group Key: data_processor.name, order_item.status, product.data_processor_id
  • Buffers: shared hit=7,792
2. 0.000 0.000 ↑ 1.2 187,362 1

Hash Join (cost=6,499.00..24,795.26 rows=217,673 width=52) (actual rows=187,362 loops=1)

  • Output: order_item.status, product.data_processor_id, data_processor.name, "order".created
  • Inner Unique: true
  • Hash Cond: (product.data_processor_id = data_processor.id)
  • Buffers: shared hit=7,792
3. 0.000 0.000 ↑ 1.2 187,362 1

Hash Join (cost=6,497.17..24,158.31 rows=217,673 width=20) (actual rows=187,362 loops=1)

  • Output: order_item.status, product.data_processor_id, "order".created
  • Inner Unique: true
  • Hash Cond: (order_item.order_id = "order".id)
  • Buffers: shared hit=7,791
4. 0.000 0.000 ↑ 1.2 187,362 1

Hash Join (cost=187.62..17,277.35 rows=217,673 width=20) (actual rows=187,362 loops=1)

  • Output: order_item.status, order_item.order_id, product.data_processor_id
  • Inner Unique: true
  • Hash Cond: (order_item.product_id = product.id)
  • Buffers: shared hit=4,831
5. 0.000 0.000 ↑ 1.2 187,362 1

Parallel Seq Scan on public.order_item (cost=0.00..16,515.25 rows=217,673 width=20) (actual rows=187,362 loops=1)

  • Output: order_item.id, order_item.status, order_item.order_id, order_item.brand_id, order_item.product_id, order_item.value, order_item.cost, order_item.price, order_item.error_code, order_item.error, order_item.internal_error, order_item.delivery_email, order_item.batch_id, order_item.e_code_id, order_item.delivery_format, order_item.attempts, order_item.order_email_template_id, order_item.price_discount, order_item.subject_line, order_item.action, order_item.encrypted_card_number, order_item.encrypted_card_serial_number, order_item.encrypted_card_pin, order_item.due_date, order_item.cost_discount, order_item.stock_lock_token, order_item.extra_recon_fields, order_item.description, order_item.wrap_primary_id, order_item.wrap_secondary_id, order_item.order_account_used, order_item.billing_model_used, order_item.select_template_id, order_item.select_link_id, order_item.delayed_product_id
  • Filter: ((order_item.status = 'SUCCESS'::orderitemstatusenum) OR (order_item.status = 'ERROR'::orderitemstatusenum))
  • Rows Removed by Filter: 3,047
  • Buffers: shared hit=4,661
6. 0.000 0.000 ↑ 1.0 755 1

Hash (cost=177.83..177.83 rows=783 width=16) (actual rows=755 loops=1)

  • Output: product.data_processor_id, product.id
  • Buckets: 1,024 Batches: 1 Memory Usage: 44kB
  • Buffers: shared hit=170
7. 0.000 0.000 ↑ 1.0 755 1

Seq Scan on public.product (cost=0.00..177.83 rows=783 width=16) (actual rows=755 loops=1)

  • Output: product.data_processor_id, product.id
  • Buffers: shared hit=170
8. 0.000 0.000 ↓ 1.0 149,838 1

Hash (cost=4,448.69..4,448.69 rows=148,869 width=16) (actual rows=149,838 loops=1)

  • Output: "order".created, "order".id
  • Buckets: 262,144 Batches: 1 Memory Usage: 9,072kB
  • Buffers: shared hit=2,960
9. 0.000 0.000 ↓ 1.0 149,838 1

Seq Scan on public."order" (cost=0.00..4,448.69 rows=148,869 width=16) (actual rows=149,838 loops=1)

  • Output: "order".created, "order".id
  • Buffers: shared hit=2,960
10. 0.000 0.000 ↓ 1.1 40 1

Hash (cost=1.37..1.37 rows=37 width=40) (actual rows=40 loops=1)

  • Output: data_processor.name, data_processor.id
  • Buckets: 1,024 Batches: 1 Memory Usage: 11kB
  • Buffers: shared hit=1
11. 0.000 0.000 ↓ 1.1 40 1

Seq Scan on public.data_processor (cost=0.00..1.37 rows=37 width=40) (actual rows=40 loops=1)

  • Output: data_processor.name, data_processor.id
  • Buffers: shared hit=1