explain.depesz.com

PostgreSQL's explain analyze made readable

Result: LPQa : Optimization for: Optimization for: Optimization for: plan #Bt72; plan #PJoy; plan #WFZo

Settings

Optimization path:

Optimization(s) for this plan:

# exclusive inclusive rows x rows loops node
1. 0.001 93.512 ↓ 0.0 0 1

GroupAggregate (cost=5,641.97..5,642.23 rows=6 width=123) (actual time=93.512..93.512 rows=0 loops=1)

  • Group Key: ordinativi_sla_view.data_ricezione, ordinativi_sla_view.banca_descrizione, ordinativi_sla_view.pacchetto_id, ordinativi_sla_view.identificativo_flusso, ordinativi_sla_view.abi, ordinativi_sla_view.banca_istituto, ordinativi_sla_view.zona_sla, ordinativi_sla_view.data_cut_off
2. 0.013 93.511 ↓ 0.0 0 1

Sort (cost=5,641.97..5,641.99 rows=6 width=97) (actual time=93.511..93.511 rows=0 loops=1)

  • Sort Key: ordinativi_sla_view.data_ricezione, ordinativi_sla_view.banca_descrizione, ordinativi_sla_view.pacchetto_id, ordinativi_sla_view.identificativo_flusso, ordinativi_sla_view.abi, ordinativi_sla_view.banca_istituto, ordinativi_sla_view.zona_sla, ordinativi_sla_view.data_cut_off
  • Sort Method: quicksort Memory: 25kB
3. 1.171 93.498 ↓ 0.0 0 1

Subquery Scan on ordinativi_sla_view (cost=5,323.54..5,641.90 rows=6 width=97) (actual time=93.498..93.498 rows=0 loops=1)

  • Filter: (ordinativi_sla_view.pacchetto_valido AND (NOT ordinativi_sla_view.stato_sla_pac) AND (ordinativi_sla_view.data_ricezione >= '2019-09-01 00:00:00'::timestamp without time zone) AND (ordinativi_sla_view.data_ricezione < '2019-09-30 00:00:00'::timestamp without time zone))
  • Rows Removed by Filter: 5,318
4. 2.133 92.327 ↓ 1.2 5,318 1

Unique (cost=5,323.54..5,573.68 rows=4,548 width=155) (actual time=89.525..92.327 rows=5,318 loops=1)

5. 35.730 90.194 ↓ 1.2 5,318 1

Sort (cost=5,323.54..5,334.91 rows=4,548 width=155) (actual time=89.524..90.194 rows=5,318 loops=1)

  • Sort Key: banca.id, banca.abi, banca.istituto, banca.descrizione, ente.id, ipa.id, pacchetto.id, pacchetto.identificativo_flusso, pacchetto.esercizio, vers_ord.id, vers_ord.importo, vers_ord.tipo_ordinativo, vers_ord.tipo_operazione, vers_ord.esercizio, pacchetto.data_ricezione, proc_vers_ord_1.data_fine_elaborazione, (CASE WHEN (date_part('isodow'::text, pacchetto.data_ricezione) = ANY ('{1,2,3,4,5}'::double precision[])) THEN CASE WHEN (((date_part('hour'::text, pacchetto.data_ricezione))::integer >= 5) AND ((date_part('hour'::text, pacchetto.data_ricezione))::integer < 11)) THEN (date_trunc('day'::text, pacchetto.data_ricezione) + '16:30:00'::interval) ELSE ((date_trunc('day'::text, pacchetto.data_ricezione) + '1 day'::interval) + '11:00:00'::interval) END ELSE ((date_trunc('day'::text, pacchetto.data_ricezione) + '2 days'::interval) + '11:00:00'::interval) END), (CASE WHEN ((proc_vers_ord.stato)::text = 'KO'::text) THEN true ELSE CASE WHEN (proc_vers_ord_1.data_fine_elaborazione IS NOT NULL) THEN CASE WHEN (proc_vers_ord_1.data_fine_elaborazione > CASE WHEN (date_part('isodow'::text, pacchetto.data_ricezione) = ANY ('{1,2,3,4}'::double precision[])) THEN CASE WHEN (((date_part('hour'::text, pacchetto.data_ricezione))::integer >= 5) AND ((date_part('hour'::text, pacchetto.data_ricezione))::integer < 11)) THEN (date_trunc('day'::text, pacchetto.data_ricezione) + '16:30:00'::interval) ELSE ((date_trunc('day'::text, pacchetto.data_ricezione) + '1 day'::interval) + '11:00:00'::interval) END WHEN (date_part('isodow'::text, pacchetto.data_ricezione) = '5'::double precision) THEN CASE WHEN (((date_part('hour'::text, pacchetto.data_ricezione))::integer >= 5) AND ((date_part('hour'::text, pacchetto.data_ricezione))::integer < 11)) THEN (date_trunc('day'::text, pacchetto.data_ricezione) + '16:30:00'::interval) ELSE ((date_trunc('day'::text, pacchetto.data_ricezione) + '3 days'::interval) + '11:00:00'::interval) END ELSE ((date_trunc('day'::text, pacchetto.data_ricezione) + '2 days'::interval) + '11:00:00'::interval) END) THEN false ELSE true END ELSE CASE WHEN (now() > CASE WHEN (date_part('isodow'::text, pacchetto.data_ricezione) = ANY ('{1,2,3,4}'::double precision[])) THEN CASE WHEN (((date_part('hour'::text, pacchetto.data_ricezione))::integer >= 5) AND ((date_part('hour'::text, pacchetto.data_ricezione))::integer < 11)) THEN (date_trunc('day'::text, pacchetto.data_ricezione) + '16:30:00'::interval) ELSE ((date_trunc('day'::text, pacchetto.data_ricezione) + '1 day'::interval) + '11:00:00'::interval) END WHEN (date_part('isodow'::text, pacchetto.data_ricezione) = '5'::double precision) THEN CASE WHEN (((date_part('hour'::text, pacchetto.data_ricezione))::integer >= 5) AND ((date_part('hour'::text, pacchetto.data_ricezione))::integer < 11)) THEN (date_trunc('day'::text, pacchetto.data_ricezione) + '16:30:00'::interval) ELSE ((date_trunc('day'::text, pacchetto.data_ricezione) + '3 days'::interval) + '11:00:00'::interval) END ELSE ((date_trunc('day'::text, pacchetto.data_ricezione) + '2 days'::interval) + '11:00:00'::interval) END) THEN false ELSE NULL::boolean END END END), (CASE WHEN (date_part('isodow'::text, pacchetto.data_ricezione) = ANY ('{1,2,3,4,5}'::double precision[])) THEN CASE WHEN (pacchetto.data_ricezione <= (date_trunc('day'::text, pacchetto.data_ricezione) + '11:00:00'::interval)) THEN 1 WHEN ((pacchetto.data_ricezione > (date_trunc('day'::text, pacchetto.data_ricezione) + '11:00:00'::interval)) AND (pacchetto.data_ricezione < (date_trunc('day'::text, pacchetto.data_ricezione) + '16:30:00'::interval))) THEN 2 ELSE 3 END ELSE 4 END), (bool_and(CASE WHEN ((proc_vers_ord.stato)::text = 'KO'::text) THEN true ELSE CASE WHEN (proc_vers_ord_1.data_fine_elaborazione IS NOT NULL) THEN CASE WHEN (proc_vers_ord_1.data_fine_elaborazione > CASE WHEN (date_part('isodow'::text, pacchetto.data_ricezione) = ANY ('{1,2,3,4}'::double precision[])) THEN CASE WHEN (((date_part('hour'::text, pacchetto.data_ricezione))::integer >= 5) AND ((date_part('hour'::text, pacchetto.data_ricezione))::integer < 11)) THEN (date_trunc('day'::text, pacchetto.data_ricezione) + '16:30:00'::interval) ELSE ((date_trunc('day'::text, pacchetto.data_ricezione) + '1 day'::interval) + '11:00:00'::interval) END WHEN (date_part('isodow'::text, pacchetto.data_ricezione) = '5'::double precision) THEN CASE WHEN (((date_part('hour'::text, pacchetto.data_ricezione))::integer >= 5) AND ((date_part('hour'::text, pacchetto.data_ricezione))::integer < 11)) THEN (date_trunc('day'::text, pacchetto.data_ricezione) + '16:30:00'::interval) ELSE ((date_trunc('day'::text, pacchetto.data_ricezione) + '3 days'::interval) + '11:00:00'::interval) END ELSE ((date_trunc('day'::text, pacchetto.data_ricezione) + '2 days'::interval) + '11:00:00'::interval) END) THEN false ELSE true END ELSE CASE WHEN (now() > CASE WHEN (date_part('isodow'::text, pacchetto.data_ricezione) = ANY ('{1,2,3,4,5}'::double precision[])) THEN CASE WHEN (((date_part('hour'::text, pacchetto.data_ricezione))::integer >= 5) AND ((date_part('hour'::text, pacchetto.data_ricezione))::integer < 11)) THEN (date_trunc('day'::text, pacchetto.data_ricezione) + '16:30:00'::interval) ELSE ((date_trunc('day'::text, pacchetto.data_ricezione) + '1 day'::interval) + '11:00:00'::interval) END ELSE ((date_trunc('day'::text, pacchetto.data_ricezione) + '2 days'::interval) + '11:00:00'::interval) END) THEN false ELSE NULL::boolean END END END) OVER (?)), (bool_and(true) OVER (?))
  • Sort Method: quicksort Memory: 1,605kB
6. 18.760 54.464 ↓ 1.2 5,318 1

WindowAgg (cost=3,245.08..5,047.22 rows=4,548 width=155) (actual time=25.141..54.464 rows=5,318 loops=1)

7. 9.693 35.704 ↓ 1.2 5,318 1

WindowAgg (cost=3,245.08..3,910.22 rows=4,548 width=144) (actual time=25.113..35.704 rows=5,318 loops=1)

8. 3.767 26.011 ↓ 1.2 5,318 1

Sort (cost=3,245.08..3,256.45 rows=4,548 width=143) (actual time=25.093..26.011 rows=5,318 loops=1)

  • Sort Key: pacchetto.id
  • Sort Method: quicksort Memory: 1,605kB
9. 1.835 22.244 ↓ 1.2 5,318 1

Hash Left Join (cost=1,748.71..2,968.76 rows=4,548 width=143) (actual time=13.229..22.244 rows=5,318 loops=1)

  • Hash Cond: (vers_ord.id = proc_vers_ord.versione_ordinativo_id)
10. 2.708 15.342 ↓ 1.2 5,318 1

Hash Right Join (cost=654.37..1,797.25 rows=4,548 width=140) (actual time=8.128..15.342 rows=5,318 loops=1)

  • Hash Cond: (proc_vers_ord_1.versione_ordinativo_id = vers_ord.id)
11. 4.537 4.537 ↓ 1.0 5,346 1

Seq Scan on proc_vers_ord proc_vers_ord_1 (cost=0.00..1,081.68 rows=5,094 width=16) (actual time=0.008..4.537 rows=5,346 loops=1)

  • Filter: (((stato)::text = ANY ('{OK,KO}'::text[])) AND ((processo)::text = 'INVIOHOST'::text))
  • Rows Removed by Filter: 16,384
12. 2.332 8.097 ↓ 1.2 5,318 1

Hash (cost=597.51..597.51 rows=4,548 width=132) (actual time=8.097..8.097 rows=5,318 loops=1)

  • Buckets: 8,192 Batches: 1 Memory Usage: 977kB
13. 2.684 5.765 ↓ 1.2 5,318 1

Hash Join (cost=258.37..597.51 rows=4,548 width=132) (actual time=2.101..5.765 rows=5,318 loops=1)

  • Hash Cond: (vers_ord.pacchetto_id = pacchetto.id)
14. 0.995 0.995 ↑ 1.0 5,503 1

Seq Scan on vers_ord (cost=0.00..273.03 rows=5,503 width=41) (actual time=0.007..0.995 rows=5,503 loops=1)

15. 0.529 2.086 ↓ 1.0 1,567 1

Hash (cost=238.84..238.84 rows=1,562 width=91) (actual time=2.086..2.086 rows=1,567 loops=1)

  • Buckets: 2,048 Batches: 1 Memory Usage: 212kB
16. 0.543 1.557 ↓ 1.0 1,567 1

Hash Join (cost=7.07..238.84 rows=1,562 width=91) (actual time=0.112..1.557 rows=1,567 loops=1)

  • Hash Cond: (pacchetto.ipa_id = ipa.id)
17. 0.911 0.911 ↓ 1.0 1,567 1

Seq Scan on pacchetto (cost=0.00..210.35 rows=1,562 width=47) (actual time=0.004..0.911 rows=1,567 loops=1)

  • Filter: (((owner)::text <> 'MIG'::text) AND ((stato)::text <> 'ERRATO'::text))
  • Rows Removed by Filter: 323
18. 0.008 0.103 ↑ 1.1 17 1

Hash (cost=6.84..6.84 rows=18 width=52) (actual time=0.103..0.103 rows=17 loops=1)

  • Buckets: 1,024 Batches: 1 Memory Usage: 10kB
19. 0.010 0.095 ↑ 1.1 17 1

Hash Join (cost=4.88..6.84 rows=18 width=52) (actual time=0.073..0.095 rows=17 loops=1)

  • Hash Cond: (ente.banca_id = banca.id)
20. 0.010 0.065 ↑ 1.1 17 1

Hash Join (cost=2.61..4.32 rows=18 width=24) (actual time=0.048..0.065 rows=17 loops=1)

  • Hash Cond: (ente.cliente_id = cliente.id)
21. 0.026 0.044 ↑ 1.0 18 1

Hash Join (cost=1.41..2.87 rows=18 width=32) (actual time=0.031..0.044 rows=18 loops=1)

  • Hash Cond: (ente.id = ipa.ente_id)
22. 0.006 0.006 ↓ 1.0 22 1

Seq Scan on ente (cost=0.00..1.21 rows=21 width=24) (actual time=0.002..0.006 rows=22 loops=1)

23. 0.007 0.012 ↑ 1.0 18 1

Hash (cost=1.18..1.18 rows=18 width=16) (actual time=0.012..0.012 rows=18 loops=1)

  • Buckets: 1,024 Batches: 1 Memory Usage: 9kB
24. 0.005 0.005 ↑ 1.0 18 1

Seq Scan on ipa (cost=0.00..1.18 rows=18 width=16) (actual time=0.002..0.005 rows=18 loops=1)

25. 0.004 0.011 ↑ 1.0 9 1

Hash (cost=1.09..1.09 rows=9 width=8) (actual time=0.011..0.011 rows=9 loops=1)

  • Buckets: 1,024 Batches: 1 Memory Usage: 9kB
26. 0.007 0.007 ↑ 1.0 9 1

Seq Scan on cliente (cost=0.00..1.09 rows=9 width=8) (actual time=0.005..0.007 rows=9 loops=1)

27. 0.013 0.020 ↓ 1.1 13 1

Hash (cost=2.12..2.12 rows=12 width=36) (actual time=0.020..0.020 rows=13 loops=1)

  • Buckets: 1,024 Batches: 1 Memory Usage: 9kB
28. 0.007 0.007 ↓ 1.1 13 1

Seq Scan on banca (cost=0.00..2.12 rows=12 width=36) (actual time=0.003..0.007 rows=13 loops=1)

29. 1.174 5.067 ↓ 1.0 5,395 1

Hash (cost=1,029.24..1,029.24 rows=5,209 width=11) (actual time=5.067..5.067 rows=5,395 loops=1)

  • Buckets: 8,192 Batches: 1 Memory Usage: 317kB
30. 3.893 3.893 ↓ 1.0 5,395 1

Seq Scan on proc_vers_ord (cost=0.00..1,029.24 rows=5,209 width=11) (actual time=0.005..3.893 rows=5,395 loops=1)

  • Filter: ((processo)::text = 'VERIFICAPOTERI'::text)
  • Rows Removed by Filter: 16,335
Planning time : 2.463 ms
Execution time : 93.841 ms