1
1
CREATE TABLE test_boxes (
2
2
b sbox
3
3
);
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
+ ^
5
23
CREATE OR REPLACE FUNCTION qnodes(q text) RETURNS text
6
24
LANGUAGE 'plpgsql' AS
7
25
$$
@@ -23,64 +41,91 @@ BEGIN
23
41
RETURN array_to_string(ret,',');
24
42
END;
25
43
$$;
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
+ CREATE INDEX test_boxes_idx ON test_boxes USING brin (b);
56
+ VACUUM ANALYZE;
57
+ \d+ test_boxes;
58
+ Table "public.test_boxes"
59
+ Column | Type | Collation | Nullable | Default | Storage | Stats target | Description
60
+ --------+------+-----------+----------+---------+---------+--------------+-------------
61
+ b | sbox | | | | plain | |
62
+ Indexes:
63
+ "test_boxes_idx" brin (b)
64
+
65
+ SELECT COUNT(*) FROM test_boxes;
66
+ count
67
+ -------
68
+ 77000
69
+ (1 row)
70
+
71
+ SET enable_indexscan = OFF;
72
+ SET enable_bitmapscan = OFF;
73
+ SET enable_seqscan = ON;
30
74
SELECT 'scan_seq', qnodes('SELECT * FROM test_boxes WHERE b <@ sbox ''( (10d,10d), (20d,20d) )''');
31
75
?column? | qnodes
32
76
----------+----------
33
77
scan_seq | Seq Scan
34
78
(1 row)
35
79
36
- SELECT * FROM test_boxes WHERE b <@ sbox '( (10d,10d), (20d,20d) )';
37
- b
38
- ---
39
- (0 rows)
80
+ SELECT COUNT(*) FROM test_boxes WHERE b <@ sbox '( (10d,10d), (20d,20d) )';
81
+ count
82
+ -------
83
+ 0
84
+ (1 row)
40
85
41
86
SELECT 'scan_seq', qnodes('SELECT * FROM test_boxes WHERE b && sbox ''( (10d,10d), (20d,20d) )''');
42
87
?column? | qnodes
43
88
----------+----------
44
89
scan_seq | Seq Scan
45
90
(1 row)
46
91
47
- SELECT * FROM test_boxes WHERE b && sbox '( (10d,10d), (20d,20d) )';
48
- b
49
- ------------------------------------------------------------------------------------
50
- ((0.349065850398866 , 0.174532925199433), (0.350065850398866 , 0.174632925199433))
92
+ SELECT COUNT(*) FROM test_boxes WHERE b && sbox '( (10d,10d), (20d,20d) )';
93
+ count
94
+ -------
95
+ 1000
51
96
(1 row)
52
97
53
- set enable_indexscan = off ;
54
- set enable_bitmapscan = on ;
55
- set enable_seqscan = off ;
98
+ SET enable_indexscan = OFF ;
99
+ SET enable_bitmapscan = ON ;
100
+ SET enable_seqscan = OFF ;
56
101
SELECT 'scan_idx', qnodes('SELECT * FROM test_boxes WHERE b <@ sbox ''( (10d,10d), (20d,20d) )''');
57
102
?column? | qnodes
58
103
----------+----------
59
104
scan_idx | Seq Scan
60
105
(1 row)
61
106
62
- SELECT * FROM test_boxes WHERE b <@ sbox '( (10d,10d), (20d,20d) )';
63
- b
64
- ---
65
- (0 rows)
107
+ SELECT COUNT(*) FROM test_boxes WHERE b <@ sbox '( (10d,10d), (20d,20d) )';
108
+ count
109
+ -------
110
+ 0
111
+ (1 row)
66
112
67
113
SELECT 'scan_idx', qnodes('SELECT * FROM test_boxes WHERE b && sbox ''( (10d,10d), (20d,20d) )''');
68
114
?column? | qnodes
69
115
----------+----------
70
116
scan_idx | Seq Scan
71
117
(1 row)
72
118
73
- SELECT * FROM test_boxes WHERE b && sbox '( (10d,10d), (20d,20d) )';
74
- b
75
- ------------------------------------------------------------------------------------
76
- ((0.349065850398866 , 0.174532925199433), (0.350065850398866 , 0.174632925199433))
119
+ SELECT COUNT(*) FROM test_boxes WHERE b && sbox '( (10d,10d), (20d,20d) )';
120
+ count
121
+ -------
122
+ 1000
77
123
(1 row)
78
124
79
125
---- cleanup
80
- DROP INDEX brin_sbox;
81
- ERROR: index "brin_sbox" does not exist
126
+ DROP INDEX test_boxes_idx;
82
127
DROP TABLE test_boxes;
83
128
DROP FUNCTION qnodes(text);
84
- set enable_indexscan = on ;
85
- set enable_bitmapscan = on ;
86
- set enable_seqscan = on ;
129
+ SET enable_indexscan = ON ;
130
+ SET enable_bitmapscan = ON ;
131
+ SET enable_seqscan = ON ;
0 commit comments