|
| 1 | +CREATE TABLE test_boxes ( |
| 2 | + b sbox |
| 3 | +); |
| 4 | + |
| 5 | +COPY test_boxes (b) FROM stdin; |
| 6 | +( (0.349065850398866, 0.174532925199433), (0.350065850398866, 0.174632925199433) ) |
| 7 | +( (1.59875999207035, 0.771416330759722), (1.5997599920703498, 0.771516330759722) ) |
| 8 | +( (1.59876348272885, 0.77141458543047), (1.5997634827288498, 0.77151458543047) ) |
| 9 | +( (1.59876697338736, 0.771412840101218), (1.5997669733873598, 0.771512840101218) ) |
| 10 | +( (1.59877046404586, 0.771411094771966), (1.5997704640458599, 0.771511094771966) ) |
| 11 | +( (1.59877395470437, 0.771409349442714), (1.59977395470437, 0.771509349442714) ) |
| 12 | +( (1.59877744536287, 0.771407604113461), (1.59977744536287, 0.771507604113461) ) |
| 13 | +( (1.59878093602137, 0.77140585878421), (1.59978093602137, 0.77150585878421) ) |
| 14 | +( (1.59878442667988, 0.771404113454958), (1.59978442667988, 0.771504113454958) ) |
| 15 | +( (1.59878791733838, 0.771402368125706), (1.59978791733838, 0.7715023681257059) ) |
| 16 | +( (1.59879140799689, 0.771400622796454), (1.5997914079968898, 0.771500622796454) ) |
| 17 | +( (1.59879489865539, 0.771398877467202), (1.5997948986553898, 0.771498877467202) ) |
| 18 | +( (1.59879838931389, 0.77139713213795), (1.5997983893138898, 0.77149713213795) ) |
| 19 | +( (1.5988018799724, 0.771395386808698), (1.5998018799723999, 0.771495386808698) ) |
| 20 | +( (1.5988053706309, 0.771393641479446), (1.5998053706309, 0.771493641479446) ) |
| 21 | +( (1.59880886128941, 0.771391896150194), (1.59980886128941, 0.771491896150194) ) |
| 22 | +( (1.59881235194791, 0.771390150820941), (1.59981235194791, 0.771490150820941) ) |
| 23 | +( (1.59881584260641, 0.77138840549169), (1.59981584260641, 0.77148840549169) ) |
| 24 | +( (1.59881933326492, 0.771386660162438), (1.59981933326492, 0.7714866601624379) ) |
| 25 | +( (1.59882282392342, 0.771384914833186), (1.5998228239234198, 0.771484914833186) ) |
| 26 | +( (1.59882631458193, 0.771383169503934), (1.5998263145819298, 0.771483169503934) ) |
| 27 | +( (1.59882980524043, 0.771381424174682), (1.5998298052404298, 0.771481424174682) ) |
| 28 | +( (1.59883329589893, 0.77137967884543), (1.5998332958989299, 0.77147967884543) ) |
| 29 | +( (1.59883678655744, 0.771377933516178), (1.5998367865574399, 0.771477933516178) ) |
| 30 | +( (1.59884027721594, 0.771376188186926), (1.59984027721594, 0.771476188186926) ) |
| 31 | +( (1.59884376787445, 0.771374442857673), (1.59984376787445, 0.771474442857673) ) |
| 32 | +( (1.59884725853295, 0.771372697528422), (1.59984725853295, 0.771472697528422) ) |
| 33 | +( (1.59885074919145, 0.77137095219917), (1.59985074919145, 0.77147095219917) ) |
| 34 | +( (1.59885423984996, 0.771369206869918), (1.5998542398499598, 0.7714692068699179) ) |
| 35 | +( (1.59885773050846, 0.771367461540666), (1.5998577305084598, 0.771467461540666) ) |
| 36 | +( (1.59886122116697, 0.771365716211414), (1.5998612211669698, 0.771465716211414) ) |
| 37 | +( (1.59886471182547, 0.771363970882162), (1.5998647118254699, 0.771463970882162) ) |
| 38 | +( (1.59886820248397, 0.77136222555291), (1.5998682024839699, 0.77146222555291) ) |
| 39 | +( (1.59887169314248, 0.771360480223658), (1.59987169314248, 0.771460480223658) ) |
| 40 | +( (1.59887518380098, 0.771358734894406), (1.59987518380098, 0.771458734894406) ) |
| 41 | +( (1.59887867445948, 0.771356989565154), (1.59987867445948, 0.771456989565154) ) |
| 42 | +( (1.59888216511799, 0.771355244235902), (1.59988216511799, 0.771455244235902) ) |
| 43 | +( (1.59888565577649, 0.77135349890665), (1.5998856557764898, 0.7714534989066499) ) |
| 44 | +( (1.598889146435, 0.771351753577398), (1.5998891464349998, 0.771451753577398) ) |
| 45 | +( (1.5988926370935, 0.771350008248146), (1.5998926370934998, 0.771450008248146) ) |
| 46 | +( (1.59889612775201, 0.771348262918894), (1.5998961277520098, 0.771448262918894) ) |
| 47 | +( (1.59889961841051, 0.771346517589642), (1.5998996184105099, 0.771446517589642) ) |
| 48 | +( (1.59890310906901, 0.77134477226039), (1.59990310906901, 0.77144477226039) ) |
| 49 | +( (1.59890659972752, 0.771343026931138), (1.59990659972752, 0.771443026931138) ) |
| 50 | +( (1.59891009038602, 0.771341281601886), (1.59991009038602, 0.771441281601886) ) |
| 51 | +( (1.59891358104452, 0.771339536272634), (1.59991358104452, 0.771439536272634) ) |
| 52 | +( (1.59891707170303, 0.771337790943382), (1.59991707170303, 0.7714377909433819) ) |
| 53 | +( (1.59892056236153, 0.77133604561413), (1.5999205623615298, 0.77143604561413) ) |
| 54 | +( (1.59892405302004, 0.771334300284878), (1.5999240530200398, 0.771434300284878) ) |
| 55 | +( (1.59892754367854, 0.771332554955626), (1.5999275436785398, 0.771432554955626) ) |
| 56 | +( (1.59893103433705, 0.771330809626374), (1.5999310343370499, 0.771430809626374) ) |
| 57 | +( (1.59893452499555, 0.771329064297122), (1.59993452499555, 0.771429064297122) ) |
| 58 | +( (1.59893801565405, 0.77132731896787), (1.59993801565405, 0.77142731896787) ) |
| 59 | +( (1.59894150631256, 0.771325573638618), (1.59994150631256, 0.771425573638618) ) |
| 60 | +( (1.59894499697106, 0.771323828309366), (1.59994499697106, 0.771423828309366) ) |
| 61 | +( (1.59894848762957, 0.771322082980114), (1.59994848762957, 0.7714220829801139) ) |
| 62 | +( (1.59895197828807, 0.771320337650862), (1.5999519782880698, 0.771420337650862) ) |
| 63 | +( (1.59895546894657, 0.77131859232161), (1.5999554689465698, 0.77141859232161) ) |
| 64 | +( (3.61121537674092, -1.33598496521933), (3.6122153767409197, -1.33588496521933) ) |
| 65 | +( (3.61121886739942, -1.33598321989008), (3.6122188673994198, -1.33588321989008) ) |
| 66 | +( (3.61122235805792, -1.33598147456083), (3.61222235805792, -1.33588147456083) ) |
| 67 | +( (3.61122584871643, -1.33597972923158), (3.61222584871643, -1.33587972923158) ) |
| 68 | +( (3.61122933937493, -1.33597798390233), (3.61222933937493, -1.33587798390233) ) |
| 69 | +( (3.61123283003344, -1.33597623857307), (3.61223283003344, -1.33587623857307) ) |
| 70 | +( (3.61123632069194, -1.33597449324382), (3.61223632069194, -1.33587449324382) ) |
| 71 | +( (3.61123981135044, -1.33597274791457), (3.61223981135044, -1.33587274791457) ) |
| 72 | +( (3.61124330200895, -1.33597100258532), (3.6122433020089497, -1.33587100258532) ) |
| 73 | +( (3.61124679266745, -1.33596925725607), (3.6122467926674497, -1.33586925725607) ) |
| 74 | +( (3.61125028332595, -1.33596751192682), (3.6122502833259498, -1.33586751192682) ) |
| 75 | +( (3.61125377398446, -1.33596576659756), (3.61225377398446, -1.33586576659756) ) |
| 76 | +( (3.61125726464296, -1.33596402126831), (3.61225726464296, -1.33586402126831) ) |
| 77 | +( (3.61126075530147, -1.33596227593906), (3.61226075530147, -1.33586227593906) ) |
| 78 | +( (3.61126424595997, -1.33596053060981), (3.61226424595997, -1.33586053060981) ) |
| 79 | +( (3.61126773661847, -1.33595878528056), (3.61226773661847, -1.33585878528056) ) |
| 80 | +( (3.61127122727698, -1.3359570399513), (3.6122712272769797, -1.3358570399513001) ) |
| 81 | +( (3.61127471793548, -1.33595529462205), (3.6122747179354797, -1.33585529462205) ) |
| 82 | +( (3.61127820859399, -1.3359535492928), (3.61227820859399, -1.3358535492928) ) |
| 83 | +\. |
| 84 | + |
| 85 | +CREATE OR REPLACE FUNCTION qnodes(q text) RETURNS text |
| 86 | +LANGUAGE 'plpgsql' AS |
| 87 | +$$ |
| 88 | +DECLARE |
| 89 | + exp TEXT; |
| 90 | + mat TEXT[]; |
| 91 | + ret TEXT[]; |
| 92 | +BEGIN |
| 93 | + FOR exp IN EXECUTE 'EXPLAIN ' || q |
| 94 | + LOOP |
| 95 | + --RAISE NOTICE 'EXP: %', exp; |
| 96 | + mat := regexp_matches(exp, ' *(?:-> *)?(.*Scan)'); |
| 97 | + --RAISE NOTICE 'MAT: %', mat; |
| 98 | + IF mat IS NOT NULL THEN |
| 99 | + ret := array_append(ret, mat[1]); |
| 100 | + END IF; |
| 101 | + --RAISE NOTICE 'RET: %', ret; |
| 102 | + END LOOP; |
| 103 | + RETURN array_to_string(ret,','); |
| 104 | +END; |
| 105 | +$$; |
| 106 | + |
| 107 | +CREATE INDEX test_boxes_idx ON test_boxes USING brin (b) WITH (pages_per_range = 16); |
| 108 | + |
| 109 | +set enable_indexscan = off; |
| 110 | +set enable_bitmapscan = off; |
| 111 | +set enable_seqscan = on; |
| 112 | + |
| 113 | +SELECT 'scan_seq', qnodes('SELECT * FROM test_boxes WHERE b <@ sbox ''( (10d,10d), (20d,20d) )'''); |
| 114 | +SELECT * FROM test_boxes WHERE b <@ sbox '( (10d,10d), (20d,20d) )'; |
| 115 | + |
| 116 | +SELECT 'scan_seq', qnodes('SELECT * FROM test_boxes WHERE b && sbox ''( (10d,10d), (20d,20d) )'''); |
| 117 | +SELECT * FROM test_boxes WHERE b && sbox '( (10d,10d), (20d,20d) )'; |
| 118 | + |
| 119 | +set enable_indexscan = off; |
| 120 | +set enable_bitmapscan = on; |
| 121 | +set enable_seqscan = off; |
| 122 | + |
| 123 | +SELECT 'scan_idx', qnodes('SELECT * FROM test_boxes WHERE b <@ sbox ''( (10d,10d), (20d,20d) )'''); |
| 124 | +SELECT * FROM test_boxes WHERE b <@ sbox '( (10d,10d), (20d,20d) )'; |
| 125 | + |
| 126 | +SELECT 'scan_idx', qnodes('SELECT * FROM test_boxes WHERE b && sbox ''( (10d,10d), (20d,20d) )'''); |
| 127 | +SELECT * FROM test_boxes WHERE b && sbox '( (10d,10d), (20d,20d) )'; |
| 128 | + |
| 129 | +---- cleanup |
| 130 | +DROP INDEX brin_sbox; |
| 131 | +DROP TABLE test_boxes; |
| 132 | +DROP FUNCTION qnodes(text); |
| 133 | + |
| 134 | +set enable_indexscan = on; |
| 135 | +set enable_bitmapscan = on; |
| 136 | +set enable_seqscan = on; |
0 commit comments