Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- CREATE TYPE platforms AS ENUM ('p1', 'p2', 'p3');
- CREATE TABLE mytable (
- id bigint NOT NULL DEFAULT nextval('mytable_sq'::regclass),
- related_id integer NOT NULL,
- platform platforms NOT NULL DEFAULT 'default'::platforms,
- name character varying(200) NOT NULL,
- CONSTRAINT mytable_pkey PRIMARY KEY (id),
- CONSTRAINT mytable_related_id_fkey FOREIGN KEY (related_id)
- REFERENCES related (id)
- );
- CREATE INDEX related_id__platform__index ON mytable (related_id, platform);
- CREATE UNIQUE INDEX some_other_index ON mytable (related_id, lower(name::text));
- EXPLAIN ANALYZE
- SELECT * FROM mytable
- WHERE related_id=1 AND platform='p2'::platforms
- LIMIT 20;
- Limit (cost=0.00..14.07 rows=20 width=737) (actual time=12863.465..12863.465 rows=0 loops=1)
- -> Seq Scan on mytable (cost=0.00..1492790.47 rows=2122653 width=737) (actual time=12863.464..12863.464 rows=0 loops=1)
- Filter: ((related_id = 1) AND (platform = 'p2'::platforms))
- Rows Removed by Filter: 21076656
- Planning time: 3.540 ms
- Execution time: 12868.190 ms
- EXPLAIN ANALYZE
- SELECT * FROM mytable
- WHERE related_id=1 AND platform='p2'::platforms;
- Bitmap Heap Scan on mytable (cost=60533.63..1295799.94 rows=2122653 width=737) (actual time=0.890..0.890 rows=0 loops=1)
- Recheck Cond: ((related_id = 1) AND (platform = 'p2'::platforms))
- -> Bitmap Index Scan on related_id__platform__index (cost=0.00..60002.97 rows=2122653 width=0) (actual time=0.888..0.888 rows=0 loops=1)
- Index Cond: ((related_id = 1) AND (platform = 'p2'::platforms))
- Planning time: 0.827 ms
- Execution time: 1.104 ms
- EXPLAIN ANALYZE
- SELECT * FROM mytable
- WHERE related_id=1 AND platform='p1'::platforms
- LIMIT 20;
- Limit (cost=0.44..70.95 rows=20 width=737) (actual time=0.759..0.995 rows=20 loops=1)
- -> Index Scan using related_id__platform__index on mytable (cost=0.44..1217669.26 rows=345388 width=737) (actual time=0.759..0.993 rows=20 loops=1)
- Index Cond: ((related_id = 1) AND (platform = 'p1'::platforms))
- Planning time: 5.776 ms
- Execution time: 2.476 ms
- EXPLAIN ANALYZE
- SELECT * FROM mytable
- WHERE related_id=1 AND platform='p3'::platforms LIMIT 20;
- Limit (cost=0.44..80.37 rows=20 width=737) (actual time=0.014..0.016 rows=2 loops=1)
- -> Index Scan using related_id__platform__index on mytable (cost=0.44..99497.62 rows=24894 width=737) (actual time=0.014..0.015 rows=2 loops=1)
- Index Cond: ((related_id = 1) AND (platform = 'p3'::platforms))
- Planning time: 0.972 ms
- Execution time: 0.123 ms
- SELECT * FROM tbl
- WHERE related_id = 1 AND platform = 'p2'::platforms
- LIMIT 20;
- CREATE INDEX related_id_1_platform_2_idx ON tbl (id)
- WHERE related_id = 1 AND platform = 'p2'::platforms;
- CREATE INDEX related_id_1_idx ON tbl (platform)
- WHERE related_id = 1;
- CREATE INDEX related_id_1_func_idx ON tbl ((platform::text::platforms)) -- double parens!
- WHERE related_id = 1;
- SELECT *
- FROM pg_stats
- WHERE schemaname = 'public' -- actual schema
- AND tablename = 'related_id_1_func_idx'; -- actual idx name
- SELECT ...
- WHERE related_id = 1 AND platform::text::platforms = 'p2'::platforms;
Add Comment
Please, Sign In to add comment