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?.
setseed
SELECT 1
CREATE TABLE
CREATE TABLE
INSERT 0 421
INSERT 0 177241
UPDATE 421
CREATE INDEX
VACUUM
REINDEX
ANALYZE
movie_id similar_movie_id similarity
0 0 1
0 1 0.6402839231277071
0 2 0.80326410702165
0 3 0.931589426258701
0 4 0.6259215008930064
SELECT 5
CREATE TABLE
INSERT 0 421
QUERY PLAN
GroupAggregate (cost=91.97..19446.32 rows=200 width=36) (actual time=3.236..239.118 rows=421 loops=1)
  Output: json_build_object('movie_id', movie_similarity_aggregated.movie_id, 'similar_movies', json_object_agg(j.key, ((j.value)::double precision) ORDER BY (row_number() OVER (?)))), movie_similarity_aggregated.movie_id
  Group Key: movie_similarity_aggregated.movie_id
  -> Incremental Sort (cost=91.97..18808.32 rows=127000 width=52) (actual time=3.209..236.302 rows=4210 loops=1)
        Output: movie_similarity_aggregated.movie_id, j.key, ((j.value)::double precision), (row_number() OVER (?))
        Sort Key: movie_similarity_aggregated.movie_id, (row_number() OVER (?))
        Presorted Key: movie_similarity_aggregated.movie_id
        Full-sort Groups: 106 Sort Method: quicksort Average Memory: 26kB Peak Memory: 26kB
        -> WindowAgg (cost=5.91..11304.58 rows=127000 width=52) (actual time=0.978..234.914 rows=4210 loops=1)
              Output: movie_similarity_aggregated.movie_id, j.key, ((j.value)::double precision), row_number() OVER (?)
              Run Condition: (row_number() OVER (?) <= 10)
              -> Incremental Sort (cost=5.91..8764.58 rows=127000 width=44) (actual time=0.961..221.860 rows=177241 loops=1)
                    Output: movie_similarity_aggregated.movie_id, ((j.value)::double precision), j.key
                    Sort Key: movie_similarity_aggregated.movie_id, ((j.value)::double precision) DESC
                    Presorted Key: movie_similarity_aggregated.movie_id
                    Full-sort Groups: 421 Sort Method: quicksort Average Memory: 28kB Peak Memory: 28kB
                    Pre-sorted Groups: 421 Sort Method: quicksort Average Memory: 44kB Peak Memory: 44kB
                    -> Nested Loop (cost=0.28..2932.83 rows=127000 width=44) (actual time=0.428..165.146 rows=177241 loops=1)
                          Output: movie_similarity_aggregated.movie_id, (j.value)::double precision, j.key
                          -> Index Scan using movie_similarity_aggregated_pkey on public.movie_similarity_aggregated (cost=0.28..75.33 rows=1270 width=36) (actual time=0.009..0.795 rows=421 loops=1)
                                Output: movie_similarity_aggregated.movie_id, movie_similarity_aggregated.similarity_matrix
                          -> Function Scan on pg_catalog.jsonb_each j (cost=0.01..1.00 rows=100 width=64) (actual time=0.137..0.165 rows=421 loops=421)
                                Output: j.key, j.value
                                Function Call: jsonb_each((movie_similarity_aggregated.similarity_matrix -> 'similar_movies'::text))
Planning Time: 0.425 ms
Execution Time: 239.217 ms
EXPLAIN
QUERY PLAN
GroupAggregate (cost=91.97..19763.82 rows=200 width=36) (actual time=2.952..246.766 rows=421 loops=1)
  Output: jsonb_build_object('movie_id', movie_similarity_aggregated.movie_id, 'similar_movies', jsonb_agg(jsonb_build_object(j.key, ((j.value)::double precision)) ORDER BY (row_number() OVER (?)))), movie_similarity_aggregated.movie_id
  Group Key: movie_similarity_aggregated.movie_id
  -> Incremental Sort (cost=91.97..18808.32 rows=127000 width=52) (actual time=2.917..237.221 rows=4210 loops=1)
        Output: movie_similarity_aggregated.movie_id, j.key, ((j.value)::double precision), (row_number() OVER (?))
        Sort Key: movie_similarity_aggregated.movie_id, (row_number() OVER (?))
        Presorted Key: movie_similarity_aggregated.movie_id
        Full-sort Groups: 106 Sort Method: quicksort Average Memory: 26kB Peak Memory: 26kB
        -> WindowAgg (cost=5.91..11304.58 rows=127000 width=52) (actual time=0.692..235.812 rows=4210 loops=1)
              Output: movie_similarity_aggregated.movie_id, j.key, ((j.value)::double precision), row_number() OVER (?)
              Run Condition: (row_number() OVER (?) <= 10)
              -> Incremental Sort (cost=5.91..8764.58 rows=127000 width=44) (actual time=0.689..222.863 rows=177241 loops=1)
                    Output: movie_similarity_aggregated.movie_id, ((j.value)::double precision), j.key
                    Sort Key: movie_similarity_aggregated.movie_id, ((j.value)::double precision) DESC
                    Presorted Key: movie_similarity_aggregated.movie_id
                    Full-sort Groups: 421 Sort Method: quicksort Average Memory: 28kB Peak Memory: 28kB
                    Pre-sorted Groups: 421 Sort Method: quicksort Average Memory: 44kB Peak Memory: 44kB
                    -> Nested Loop (cost=0.28..2932.83 rows=127000 width=44) (actual time=0.155..166.149 rows=177241 loops=1)
                          Output: movie_similarity_aggregated.movie_id, (j.value)::double precision, j.key
                          -> Index Scan using movie_similarity_aggregated_pkey on public.movie_similarity_aggregated (cost=0.28..75.33 rows=1270 width=36) (actual time=0.009..0.842 rows=421 loops=1)
                                Output: movie_similarity_aggregated.movie_id, movie_similarity_aggregated.similarity_matrix
                          -> Function Scan on pg_catalog.jsonb_each j (cost=0.01..1.00 rows=100 width=64) (actual time=0.137..0.167 rows=421 loops=421)
                                Output: j.key, j.value
                                Function Call: jsonb_each((movie_similarity_aggregated.similarity_matrix -> 'similar_movies'::text))
Planning Time: 0.164 ms
Execution Time: 246.857 ms
EXPLAIN
QUERY PLAN
GroupAggregate (cost=100.58..31185.99 rows=421 width=36) (actual time=1.235..111.626 rows=421 loops=1)
  Output: jsonb_build_object('movie_id', movie_similarity_eav.movie_id, 'similar_movies', jsonb_agg(jsonb_build_object(movie_similarity_eav.similar_movie_id, movie_similarity_eav.similarity) ORDER BY (row_number() OVER (?)))), movie_similarity_eav.movie_id
  Group Key: movie_similarity_eav.movie_id
  -> Incremental Sort (cost=100.58..29850.37 rows=177241 width=24) (actual time=1.203..102.477 rows=4210 loops=1)
        Output: movie_similarity_eav.movie_id, movie_similarity_eav.similar_movie_id, movie_similarity_eav.similarity, (row_number() OVER (?))
        Sort Key: movie_similarity_eav.movie_id, (row_number() OVER (?))
        Presorted Key: movie_similarity_eav.movie_id
        Full-sort Groups: 106 Sort Method: quicksort Average Memory: 26kB Peak Memory: 26kB
        -> WindowAgg (cost=35.04..19900.79 rows=177241 width=24) (actual time=0.221..101.367 rows=4210 loops=1)
              Output: movie_similarity_eav.movie_id, movie_similarity_eav.similar_movie_id, movie_similarity_eav.similarity, row_number() OVER (?)
              Run Condition: (row_number() OVER (?) <= 10)
              -> Incremental Sort (cost=35.04..16799.07 rows=177241 width=16) (actual time=0.218..88.527 rows=177241 loops=1)
                    Output: movie_similarity_eav.movie_id, movie_similarity_eav.similarity, movie_similarity_eav.similar_movie_id
                    Sort Key: movie_similarity_eav.movie_id, movie_similarity_eav.similarity DESC
                    Presorted Key: movie_similarity_eav.movie_id
                    Full-sort Groups: 421 Sort Method: quicksort Average Memory: 28kB Peak Memory: 28kB
                    Pre-sorted Groups: 421 Sort Method: quicksort Average Memory: 44kB Peak Memory: 44kB
                    -> Index Scan using movie_similarity_eav_pkey on public.movie_similarity_eav (cost=0.42..6849.49 rows=177241 width=16) (actual time=0.014..36.296 rows=177241 loops=1)
                          Output: movie_similarity_eav.movie_id, movie_similarity_eav.similarity, movie_similarity_eav.similar_movie_id
Planning Time: 0.139 ms
Execution Time: 111.706 ms
EXPLAIN