explain.depesz.com

PostgreSQL's explain analyze made readable

Result: xFid

Settings
# exclusive inclusive rows x rows loops node
1. 1,733.138 2,559.524 ↑ 1.7 33 1

Nested Loop (cost=9,582.60..1,169,555.30 rows=56 width=315) (actual time=334.284..2,559.524 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. 5.990 166.334 ↑ 2.7 34 1

Subquery Scan on a (cost=9,582.60..10,180.80 rows=92 width=31) (actual time=134.660..166.334 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,363
3. 18.468 160.344 ↓ 1.1 20,397 1

WindowAgg (cost=9,582.60..9,950.72 rows=18,406 width=159) (actual time=134.644..160.344 rows=20,397 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. 112.059 141.876 ↓ 1.1 20,397 1

Sort (cost=9,582.60..9,628.62 rows=18,406 width=31) (actual time=134.631..141.876 rows=20,397 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. 29.817 29.817 ↓ 1.1 20,397 1

Index Scan using ix_seguimiento_horaenviogps on public.seguimiento (cost=0.44..8,278.73 rows=18,406 width=31) (actual time=0.044..29.817 rows=20,397 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.733 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. 1.035 1.035 ↑ 1.1 69 1

Seq Scan on public.unidadrecurso (cost=0.00..447.81 rows=74 width=82) (actual time=0.033..1.035 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. 29.700 657.888 ↑ 1.0 1 33

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

  • Output: count(1)
11. 628.188 628.188 ↓ 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=6.810..19.036 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,228
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)