add batch remove batch split batch comment selection show hidden batches hide batch highlight batch
db<>fiddle
donate feedback about
By using db<>fiddle, you agree to license everything you submit by Creative Commons CC0.
Help with an interesting Postgres question: Why isn't an Index Only Scan used on a partition accessed via the parent table?.
version
PostgreSQL 14.10 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 8.5.0 20210514 (Red Hat 8.5.0-20), 64-bit
SELECT 1
CREATE TABLE
INSERT 0 1
INSERT 0 299999
ANALYZE
string_to_array
{xxx,eod,nhoj,oof,rab}
SELECT 1
unnest
xxx
eod
nhoj
oof
rab
SELECT 5
t_field id elem num
bar$foo$john$doe$xxx 1 xxx 1
bar$foo$john$doe$xxx 1 eod 2
bar$foo$john$doe$xxx 1 nhoj 3
bar$foo$john$doe$xxx 1 oof 4
bar$foo$john$doe$xxx 1 rab 5
c0a0$eaa5a$dce98$f0e$9e4 2 4e9 1
c0a0$eaa5a$dce98$f0e$9e4 2 e0f 2
c0a0$eaa5a$dce98$f0e$9e4 2 89ecd 3
c0a0$eaa5a$dce98$f0e$9e4 2 a5aae 4
c0a0$eaa5a$dce98$f0e$9e4 2 0a0c 5
SELECT 10
t_field id elem num
bar$foo$john$doe$xxx 1 xxx 1
bar$foo$john$doe$xxx 1 eod 2
bar$foo$john$doe$xxx 1 nhoj 3
bar$foo$john$doe$xxx 1 oof 4
bar$foo$john$doe$xxx 1 rab 5
c0a0$eaa5a$dce98$f0e$9e4 2 4e9 1
c0a0$eaa5a$dce98$f0e$9e4 2 e0f 2
c0a0$eaa5a$dce98$f0e$9e4 2 89ecd 3
c0a0$eaa5a$dce98$f0e$9e4 2 a5aae 4
c0a0$eaa5a$dce98$f0e$9e4 2 0a0c 5
SELECT 10
t_field id elem rn
bar$foo$john$doe$xxx 1 xxx 1
bar$foo$john$doe$xxx 1 eod 2
bar$foo$john$doe$xxx 1 nhoj 3
bar$foo$john$doe$xxx 1 oof 4
bar$foo$john$doe$xxx 1 rab 5
c0a0$eaa5a$dce98$f0e$9e4 2 4e9 1
c0a0$eaa5a$dce98$f0e$9e4 2 e0f 2
c0a0$eaa5a$dce98$f0e$9e4 2 89ecd 3
c0a0$eaa5a$dce98$f0e$9e4 2 a5aae 4
c0a0$eaa5a$dce98$f0e$9e4 2 0a0c 5
SELECT 10
t_field result
bar$foo$john$doe$xxx bar$foo$john$doe-xxx
c0a0$eaa5a$dce98$f0e$9e4 c0a0$eaa5a$dce98$f0e-9e4
SELECT 2
QUERY PLAN
GroupAggregate (cost=8.87..2600529.87 rows=300000 width=36) (actual rows=300000 loops=1)
  Group Key: t.id
  -> Nested Loop (cost=8.87..56529.87 rows=900000 width=36) (actual rows=1200000 loops=1)
        -> Index Only Scan using test_pkey on test t (cost=0.42..10021.42 rows=300000 width=4) (actual rows=300000 loops=1)
              Heap Fetches: 300000
        -> Function Scan on unnest x (cost=8.45..8.57 rows=3 width=32) (actual rows=4 loops=300000)
              Filter: (num > 1)
              Rows Removed by Filter: 1
              SubPlan 2
                -> Index Scan using test_pkey on test test_1 (cost=0.42..8.44 rows=1 width=24) (actual rows=1 loops=300000)
                      Index Cond: (id = t.id)
  SubPlan 1
    -> Index Scan using test_pkey on test (cost=0.42..8.44 rows=1 width=32) (actual rows=1 loops=300000)
          Index Cond: (id = t.id)
Planning Time: 0.155 ms
Execution Time: 4047.734 ms
EXPLAIN
f result
bar$foo$john$doe$xxx bar$foo$john$doe-xxx
c0a0$eaa5a$dce98$f0e$9e4 c0a0$eaa5a$dce98$f0e-9e4
SELECT 2
QUERY PLAN
GroupAggregate (cost=8.87..2600529.87 rows=300000 width=60) (actual rows=300000 loops=1)
  Group Key: t.id
  -> Nested Loop (cost=8.87..56529.87 rows=900000 width=60) (actual rows=1200000 loops=1)
        -> Index Scan using test_pkey on test t (cost=0.42..10021.42 rows=300000 width=28) (actual rows=300000 loops=1)
        -> Function Scan on unnest x (cost=8.45..8.57 rows=3 width=32) (actual rows=4 loops=300000)
              Filter: (num > 1)
              Rows Removed by Filter: 1
              SubPlan 2
                -> Index Scan using test_pkey on test test_1 (cost=0.42..8.44 rows=1 width=24) (actual rows=1 loops=300000)
                      Index Cond: (id = t.id)
  SubPlan 1
    -> Index Scan using test_pkey on test (cost=0.42..8.44 rows=1 width=32) (actual rows=1 loops=300000)
          Index Cond: (id = t.id)
Planning Time: 0.150 ms
Execution Time: 4011.771 ms
EXPLAIN
t_field id elem rn
bar$foo$john$doe$xxx 1 xxx 1
bar$foo$john$doe$xxx 1 eod 2
bar$foo$john$doe$xxx 1 nhoj 3
bar$foo$john$doe$xxx 1 oof 4
bar$foo$john$doe$xxx 1 rab 5
c0a0$eaa5a$dce98$f0e$9e4 2 4e9 1
c0a0$eaa5a$dce98$f0e$9e4 2 e0f 2
c0a0$eaa5a$dce98$f0e$9e4 2 89ecd 3
c0a0$eaa5a$dce98$f0e$9e4 2 a5aae 4
c0a0$eaa5a$dce98$f0e$9e4 2 0a0c 5
SELECT 10
f result
bar$foo$john$doe$xxx bar$foo$john$doe-xxx
c0a0$eaa5a$dce98$f0e$9e4 c0a0$eaa5a$dce98$f0e-9e4
SELECT 2
QUERY PLAN
GroupAggregate (cost=9.03..8670029.87 rows=1000000 width=60) (actual rows=300000 loops=1)
  Group Key: tab.id, tab.f
  -> Incremental Sort (cost=9.03..197529.87 rows=1000000 width=60) (actual rows=1200000 loops=1)
        Sort Key: tab.id, tab.f
        Presorted Key: tab.id
        Full-sort Groups: 37500 Sort Method: quicksort Average Memory: 27kB Peak Memory: 27kB
        -> Subquery Scan on tab (cost=8.87..152529.87 rows=1000000 width=60) (actual rows=1200000 loops=1)
              Filter: (tab.rn > 1)
              Rows Removed by Filter: 300000
              -> WindowAgg (cost=8.87..115029.87 rows=3000000 width=68) (actual rows=1500000 loops=1)
                    -> Nested Loop (cost=8.87..70029.87 rows=3000000 width=60) (actual rows=1500000 loops=1)
                          -> Index Scan using test_pkey on test t (cost=0.42..10021.42 rows=300000 width=28) (actual rows=300000 loops=1)
                          -> Function Scan on unnest s (cost=8.45..8.55 rows=10 width=32) (actual rows=5 loops=300000)
                                SubPlan 2
                                  -> Index Scan using test_pkey on test test_1 (cost=0.42..8.44 rows=1 width=24) (actual rows=1 loops=300000)
                                        Index Cond: (id = t.id)
  SubPlan 1
    -> Index Scan using test_pkey on test (cost=0.42..8.44 rows=1 width=32) (actual rows=1 loops=300000)
          Index Cond: (id = tab.id)
Planning Time: 0.161 ms
Execution Time: 5003.977 ms
EXPLAIN