explain.depesz.com

PostgreSQL's explain analyze made readable

Result: xD8I

Settings
# exclusive inclusive rows x rows loops node
1. 32.180 517.229 ↑ 1.7 31,059 1

Nested Loop (cost=136,567.05..293,410.79 rows=52,243 width=1,225) (actual time=317.848..517.229 rows=31,059 loops=1)

  • Buffers: shared hit=185046 read=9329
  • I/O Timings: read=157.492
2. 29.029 329.754 ↑ 1.7 31,059 1

HashAggregate (cost=136,566.62..137,081.73 rows=51,511 width=4) (actual time=317.825..329.754 rows=31,059 loops=1)

  • Group Key: personal_access_tokens.user_id
  • Buffers: shared hit=60668 read=9329
  • I/O Timings: read=157.492
3. 300.725 300.725 ↑ 1.2 44,442 1

Index Scan using index_pat_on_user_id_and_expires_at on public.personal_access_tokens (cost=0.43..136,436.01 rows=52,243 width=4) (actual time=0.010..300.725 rows=44,442 loops=1)

  • Index Cond: ((personal_access_tokens.expires_at >= '2020-01-01'::date) AND (personal_access_tokens.expires_at <= '2020-05-01'::date))
  • Filter: ((NOT personal_access_tokens.impersonation) AND (NOT personal_access_tokens.revoked) AND (NOT personal_access_tokens.expire_notification_delivered))
  • Rows Removed by Filter: 16622
  • Buffers: shared hit=60668 read=9329
  • I/O Timings: read=157.492
4. 155.295 155.295 ↑ 1.0 1 31,059

Index Scan using users_pkey on public.users (cost=0.43..3.02 rows=1 width=1,225) (actual time=0.005..0.005 rows=1 loops=31,059)

  • Index Cond: (users.id = personal_access_tokens.user_id)
  • Buffers: shared hit=124378