explain.depesz.com

PostgreSQL's explain analyze made readable

Result: uMHv

Settings
# exclusive inclusive rows x rows loops node
1. 1,885.898 2,760.555 ↑ 1.7 33 1

Nested Loop (cost=9,585.84..1,169,558.76 rows=56 width=315) (actual time=317.216..2,760.555 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)
  • Join Filter: ((unidadrecurso.idunidadrecurso)::text = (a.idunidadrecurso)::text)
  • Rows Removed by Join Filter: 2,313
2. 6.392 172.530 ↑ 2.7 34 1

Subquery Scan on a (cost=9,585.84..10,184.26 rows=92 width=31) (actual time=139.461..172.530 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,360
3. 19.143 166.138 ↓ 1.1 20,394 1

WindowAgg (cost=9,585.84..9,954.10 rows=18,413 width=159) (actual time=139.449..166.138 rows=20,394 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. 111.245 146.995 ↓ 1.1 20,394 1

Sort (cost=9,585.84..9,631.87 rows=18,413 width=31) (actual time=139.436..146.995 rows=20,394 loops=1)

  • Output: seguimiento.idunidadrecurso, seguimiento.horaenviogps, seguimiento.posicionx, seguimiento.posiciony
  • Sort Key: seguimiento.idunidadrecurso, seguimiento.horaenviogps DESC
  • Sort Method: quicksort Memory: 2,362kB
5. 35.750 35.750 ↓ 1.1 20,394 1

Index Scan using ix_seguimiento_horaenviogps on public.seguimiento (cost=0.44..8,281.42 rows=18,413 width=31) (actual time=4.839..35.750 rows=20,394 loops=1)

  • Output: seguimiento.idunidadrecurso, seguimiento.horaenviogps, seguimiento.posicionx, seguimiento.posiciony
  • Index Cond: (seguimiento.horaenviogps >= (('now'::cstring)::timestamp without time zone - '1 day'::interval))
  • Filter: ((seguimiento.posicionx <> '0'::double precision) AND (seguimiento.posiciony <> '0'::double precision))
  • Rows Removed by Filter: 1
6. 0.772 1.768 ↑ 1.1 69 34

Materialize (cost=0.00..448.19 rows=74 width=82) (actual time=0.001..0.052 rows=69 loops=34)

  • 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
7. 0.996 0.996 ↑ 1.1 69 1

Seq Scan on public.unidadrecurso (cost=0.00..447.81 rows=74 width=82) (actual time=0.037..0.996 rows=69 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: 52
8.          

SubPlan (for Nested Loop)

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.011..0.012 rows=1 loops=33)

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

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

  • Output: count(1)
11. 667.557 667.557 ↓ 1.8 3,770 33

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

  • Output: a_1.estadodireccional, a_1.idunidadrecurso, a_1.estado
  • Index Cond: (a_1.idunidadrecurso = (unidadrecurso.idunidadrecurso)::text)
  • Heap Fetches: 2,102
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)