11CREATE TABLE test_boxes (
22 b sbox
33);
4- COPY test_boxes (b) FROM stdin;
4+ CREATE TABLE test_boxes_tmp (
5+ b sbox
6+ );
7+ COPY test_boxes_tmp (b) FROM stdin;
8+ DO $$
9+ DECLARE
10+ idx INT := 0;
11+ BEGIN
12+ WHILE idx < 1000 LOOP
13+ INSERT INTO test_boxes(b) SELECT b FROM test_boxes_tmp;
14+ idx := idx + 1;
15+ END LOOP;
16+ END $$;
17+ SELECT "test_boxes_tmp: number of rows", COUNT(*) FROM test_boxes_tmp
18+ UNION ALL
19+ SELECT "test_boxes: number of rows", COUNT(*) FROM test_boxes;
20+ ERROR: column "test_boxes_tmp: number of rows" does not exist
21+ LINE 1: SELECT "test_boxes_tmp: number of rows", COUNT(*) FROM test_...
22+ ^
523CREATE OR REPLACE FUNCTION qnodes(q text) RETURNS text
624LANGUAGE 'plpgsql' AS
725$$
@@ -23,64 +41,92 @@ BEGIN
2341 RETURN array_to_string(ret,',');
2442END;
2543$$;
26- CREATE INDEX test_boxes_idx ON test_boxes USING brin (b) WITH (pages_per_range = 16);
27- set enable_indexscan = off;
28- set enable_bitmapscan = off;
29- set enable_seqscan = on;
44+ CREATE INDEX test_boxes_gist_idx ON test_boxes USING gist(b);
45+ CLUSTER test_boxes USING test_boxes_gist_idx;
46+ \d+ test_boxes;
47+ Table "public.test_boxes"
48+ Column | Type | Collation | Nullable | Default | Storage | Stats target | Description
49+ --------+------+-----------+----------+---------+---------+--------------+-------------
50+ b | sbox | | | | plain | |
51+ Indexes:
52+ "test_boxes_gist_idx" gist (b) CLUSTER
53+
54+ DROP INDEX test_boxes_gist_idx;
55+ VACUUM FULL;
56+ VACUUM ANALYZE;
57+ CREATE INDEX test_boxes_idx ON test_boxes USING brin (b);
58+ \d+ test_boxes;
59+ Table "public.test_boxes"
60+ Column | Type | Collation | Nullable | Default | Storage | Stats target | Description
61+ --------+------+-----------+----------+---------+---------+--------------+-------------
62+ b | sbox | | | | plain | |
63+ Indexes:
64+ "test_boxes_idx" brin (b)
65+
66+ SELECT COUNT(*) FROM test_boxes;
67+ count
68+ -------
69+ 77000
70+ (1 row)
71+
72+ SET enable_indexscan = OFF;
73+ SET enable_bitmapscan = OFF;
74+ SET enable_seqscan = ON;
3075SELECT 'scan_seq', qnodes('SELECT * FROM test_boxes WHERE b <@ sbox ''( (10d,10d), (20d,20d) )''');
3176 ?column? | qnodes
3277----------+----------
3378 scan_seq | Seq Scan
3479(1 row)
3580
36- SELECT * FROM test_boxes WHERE b <@ sbox '( (10d,10d), (20d,20d) )';
37- b
38- ---
39- (0 rows)
81+ SELECT COUNT(*) FROM test_boxes WHERE b <@ sbox '( (10d,10d), (20d,20d) )';
82+ count
83+ -------
84+ 0
85+ (1 row)
4086
4187SELECT 'scan_seq', qnodes('SELECT * FROM test_boxes WHERE b && sbox ''( (10d,10d), (20d,20d) )''');
4288 ?column? | qnodes
4389----------+----------
4490 scan_seq | Seq Scan
4591(1 row)
4692
47- SELECT * FROM test_boxes WHERE b && sbox '( (10d,10d), (20d,20d) )';
48- b
49- ------------------------------------------------------------------------------------
50- ((0.349065850398866 , 0.174532925199433), (0.350065850398866 , 0.174632925199433))
93+ SELECT COUNT(*) FROM test_boxes WHERE b && sbox '( (10d,10d), (20d,20d) )';
94+ count
95+ -------
96+ 1000
5197(1 row)
5298
53- set enable_indexscan = off ;
54- set enable_bitmapscan = on ;
55- set enable_seqscan = off ;
99+ SET enable_indexscan = OFF ;
100+ SET enable_bitmapscan = ON ;
101+ SET enable_seqscan = OFF ;
56102SELECT 'scan_idx', qnodes('SELECT * FROM test_boxes WHERE b <@ sbox ''( (10d,10d), (20d,20d) )''');
57103 ?column? | qnodes
58104----------+----------
59105 scan_idx | Seq Scan
60106(1 row)
61107
62- SELECT * FROM test_boxes WHERE b <@ sbox '( (10d,10d), (20d,20d) )';
63- b
64- ---
65- (0 rows)
108+ SELECT COUNT(*) FROM test_boxes WHERE b <@ sbox '( (10d,10d), (20d,20d) )';
109+ count
110+ -------
111+ 0
112+ (1 row)
66113
67114SELECT 'scan_idx', qnodes('SELECT * FROM test_boxes WHERE b && sbox ''( (10d,10d), (20d,20d) )''');
68115 ?column? | qnodes
69116----------+----------
70117 scan_idx | Seq Scan
71118(1 row)
72119
73- SELECT * FROM test_boxes WHERE b && sbox '( (10d,10d), (20d,20d) )';
74- b
75- ------------------------------------------------------------------------------------
76- ((0.349065850398866 , 0.174532925199433), (0.350065850398866 , 0.174632925199433))
120+ SELECT COUNT(*) FROM test_boxes WHERE b && sbox '( (10d,10d), (20d,20d) )';
121+ count
122+ -------
123+ 1000
77124(1 row)
78125
79126---- cleanup
80- DROP INDEX brin_sbox;
81- ERROR: index "brin_sbox" does not exist
127+ DROP INDEX test_boxes_idx;
82128DROP TABLE test_boxes;
83129DROP FUNCTION qnodes(text);
84- set enable_indexscan = on ;
85- set enable_bitmapscan = on ;
86- set enable_seqscan = on ;
130+ SET enable_indexscan = ON ;
131+ SET enable_bitmapscan = ON ;
132+ SET enable_seqscan = ON ;
0 commit comments