explain.depesz.com

PostgreSQL's explain analyze made readable

Result: 0E56

Settings
# exclusive inclusive rows x rows loops node
1. 1,696.953 19,666.572 ↑ 1.9 33 1

Merge Join (cost=543,469.44..1,827,022.54 rows=62 width=315) (actual time=17,447.631..19,666.572 rows=33 loops=1)

  • Output: unidadrecurso.idtiporecursoagr, unidadrecurso.idunidadrecurso, unidadrecurso.idestado, unidadrecurso.idtiporecurso, a.hora, a.posicionx, a.posiciony, unidadrecurso.idtiporecurso, (SubPlan 1), to_char(unidadrecurso.horaestado, 'hh24:mi'::text), COALESCE(unidadrecurso.edt, ''::character varying), COALESCE(unidadrecurso.hdt, ''::character varying), unidadrecurso.td, COALESCE(CASE WHEN ((SubPlan 2) = 1) THEN (SubPlan 3) ELSE NULL::text END, ''::text), unidadrecurso.ne, unidadrecurso.np, unidadrecurso.comentario, unidadrecurso.idbase, unidadrecurso.estadodireccional, unidadrecurso.tma, unidadrecurso.radio, getstringrecursosunidadgis(unidadrecurso.idunidadrecurso), getstringasistenciasunidadgis(unidadrecurso.idunidadrecurso)
  • Merge Cond: ((a.idunidadrecurso)::text = (unidadrecurso.idunidadrecurso)::text)
2. 5.828 17,346.643 ↑ 2.6 34 1

Subquery Scan on a (cost=543,018.86..543,586.57 rows=87 width=31) (actual time=17,317.082..17,346.643 rows=34 loops=1)

  • Output: a.horaentrada, a.idempresa, a.idunidadrecurso, a.codigorecurso, a.estado, a.posicionx, a.posiciony, a.hora, a.fila
  • Filter: ((a.posicionx IS NOT NULL) AND (a.posiciony IS NOT NULL) AND (a.fila = 1))
  • Rows Removed by Filter: 20,231
3. 16.701 17,340.815 ↓ 1.2 20,265 1

WindowAgg (cost=543,018.86..543,368.22 rows=17,468 width=159) (actual time=17,317.070..17,340.815 rows=20,265 loops=1)

  • Output: NULL::timestamp without time zone, NULL::character varying(10), seguimiento.idunidadrecurso, NULL::character varying(20), NULL::character varying(3), seguimiento.posicionx, seguimiento.posiciony, seguimiento.horaenviogps, row_number() OVER (?)
4. 81.204 17,324.114 ↓ 1.2 20,265 1

Sort (cost=543,018.86..543,062.53 rows=17,468 width=31) (actual time=17,317.060..17,324.114 rows=20,265 loops=1)

  • Output: seguimiento.idunidadrecurso, seguimiento.horaenviogps, seguimiento.posicionx, seguimiento.posiciony
  • Sort Key: seguimiento.idunidadrecurso, seguimiento.horaenviogps DESC
  • Sort Method: quicksort Memory: 2,352kB
5. 17,242.910 17,242.910 ↓ 1.2 20,265 1

Seq Scan on public.seguimiento (cost=0.00..541,788.03 rows=17,468 width=31) (actual time=12,416.474..17,242.910 rows=20,265 loops=1)

  • Output: seguimiento.idunidadrecurso, seguimiento.horaenviogps, seguimiento.posicionx, seguimiento.posiciony
  • Filter: ((seguimiento.posicionx <> '0'::double precision) AND (seguimiento.posiciony <> '0'::double precision) AND (seguimiento.horaenviogps >= (('now'::cstring)::timestamp without time zone - '1 day'::interval)))
  • Rows Removed by Filter: 14,314,594
6. 0.312 1.058 ↑ 1.0 83 1

Sort (cost=450.58..450.79 rows=86 width=82) (actual time=1.002..1.058 rows=83 loops=1)

  • Output: unidadrecurso.idtiporecursoagr, unidadrecurso.idunidadrecurso, unidadrecurso.idestado, unidadrecurso.idtiporecurso, unidadrecurso.horaestado, unidadrecurso.edt, unidadrecurso.hdt, unidadrecurso.td, unidadrecurso.ne, unidadrecurso.np, unidadrecurso.comentario, unidadrecurso.idbase, unidadrecurso.estadodireccional, unidadrecurso.tma, unidadrecurso.radio
  • Sort Key: unidadrecurso.idunidadrecurso
  • Sort Method: quicksort Memory: 38kB
7. 0.746 0.746 ↑ 1.0 83 1

Seq Scan on public.unidadrecurso (cost=0.00..447.81 rows=86 width=82) (actual time=0.018..0.746 rows=83 loops=1)

  • Output: unidadrecurso.idtiporecursoagr, unidadrecurso.idunidadrecurso, unidadrecurso.idestado, unidadrecurso.idtiporecurso, unidadrecurso.horaestado, unidadrecurso.edt, unidadrecurso.hdt, unidadrecurso.td, unidadrecurso.ne, unidadrecurso.np, unidadrecurso.comentario, unidadrecurso.idbase, unidadrecurso.estadodireccional, unidadrecurso.tma, unidadrecurso.radio
  • Filter: (((unidadrecurso.idestado)::text <> 'UE'::text) AND ((unidadrecurso.idestado)::text !~~ 'X%'::text))
  • Rows Removed by Filter: 38
8.          

SubPlan (for Merge Join)

9. 0.396 0.396 ↑ 1.0 1 33

Seq Scan on public.estado (cost=0.00..1.41 rows=1 width=3) (actual time=0.010..0.012 rows=1 loops=33)

  • Output: estado.nombreestado
  • Filter: ((estado.idestado)::text = (unidadrecurso.idestado)::text)
  • Rows Removed by Filter: 32
10. 26.301 621.522 ↑ 1.0 1 33

Aggregate (cost=8,603.45..8,603.46 rows=1 width=8) (actual time=18.833..18.834 rows=1 loops=33)

  • Output: count(1)
11. 595.221 595.221 ↓ 1.8 3,769 33

Index Only Scan using ixrecursolineaestado2 on public.recurso a_1 (cost=0.42..8,598.25 rows=2,078 width=0) (actual time=6.729..18.037 rows=3,769 loops=33)

  • Output: a_1.estadodireccional, a_1.idunidadrecurso, a_1.estado
  • Index Cond: (a_1.idunidadrecurso = (unidadrecurso.idunidadrecurso)::text)
  • Heap Fetches: 160
12. 0.000 0.000 ↓ 0.0 0

Index Scan using ixrecursolineaestado2 on public.recurso a_2 (cost=0.42..12,087.92 rows=2,078 width=32) (never executed)

  • Output: (((((((a_2.fechademanda)::text || 'D'::text) || rpad('0'::text, (4 - length((a_2.iddemanda)::text)), '0'::text)) || ((a_2.iddemanda)::character varying(4))::text) || 'R'::text) || rpad('0'::text, (4 - length((a_2.idrecurso)::text)), '0'::text)) || ((a_2.idrecurso)::character varying(4))::text)
  • Index Cond: ((a_2.idunidadrecurso)::text = (unidadrecurso.idunidadrecurso)::text)