github.com/cockroachdb/cockroach@v20.2.0-alpha.1+incompatible/pkg/sql/opt/exec/execbuilder/testdata/distinct (about) 1 # LogicTest: local 2 3 statement ok 4 CREATE TABLE xyz ( 5 x INT PRIMARY KEY, 6 y INT, 7 z INT, 8 INDEX foo (z, y) 9 ) 10 11 query TTT 12 EXPLAIN SELECT DISTINCT y, z FROM xyz 13 ---- 14 · distributed false 15 · vectorized true 16 distinct · · 17 │ distinct on y, z 18 │ order key y, z 19 └── scan · · 20 · table xyz@foo 21 · spans FULL SCAN 22 23 query TTT 24 EXPLAIN SELECT DISTINCT y, z FROM xyz ORDER BY z 25 ---- 26 · distributed false 27 · vectorized true 28 distinct · · 29 │ distinct on y, z 30 │ order key y, z 31 └── scan · · 32 · table xyz@foo 33 · spans FULL SCAN 34 35 query TTT 36 EXPLAIN SELECT DISTINCT y, z FROM xyz ORDER BY y 37 ---- 38 · distributed false 39 · vectorized true 40 sort · · 41 │ order +y 42 └── distinct · · 43 │ distinct on y, z 44 │ order key y, z 45 └── scan · · 46 · table xyz@foo 47 · spans FULL SCAN 48 49 query TTT 50 EXPLAIN SELECT DISTINCT y, z FROM xyz ORDER BY y, z 51 ---- 52 · distributed false 53 · vectorized true 54 sort · · 55 │ order +y,+z 56 └── distinct · · 57 │ distinct on y, z 58 │ order key y, z 59 └── scan · · 60 · table xyz@foo 61 · spans FULL SCAN 62 63 query TTT 64 EXPLAIN SELECT DISTINCT y + z AS r FROM xyz ORDER BY y + z 65 ---- 66 · distributed false 67 · vectorized true 68 distinct · · 69 │ distinct on r 70 │ order key r 71 └── sort · · 72 │ order +r 73 └── render · · 74 └── scan · · 75 · table xyz@primary 76 · spans FULL SCAN 77 78 query TTT 79 EXPLAIN SELECT DISTINCT y AS w, z FROM xyz ORDER BY z 80 ---- 81 · distributed false 82 · vectorized true 83 distinct · · 84 │ distinct on w, z 85 │ order key w, z 86 └── scan · · 87 · table xyz@foo 88 · spans FULL SCAN 89 90 query TTT 91 EXPLAIN SELECT DISTINCT y AS w FROM xyz ORDER BY y 92 ---- 93 · distributed false 94 · vectorized true 95 sort · · 96 │ order +w 97 └── distinct · · 98 │ distinct on w 99 └── scan · · 100 · table xyz@primary 101 · spans FULL SCAN 102 103 query TTTTT 104 EXPLAIN (VERBOSE) SELECT DISTINCT x FROM xyz 105 ---- 106 · distributed false · · 107 · vectorized true · · 108 scan · · (x) · 109 · table xyz@primary · · 110 · spans FULL SCAN · · 111 112 query TTTTT 113 EXPLAIN (VERBOSE) SELECT DISTINCT x, y, z FROM xyz 114 ---- 115 · distributed false · · 116 · vectorized true · · 117 scan · · (x, y, z) · 118 · table xyz@primary · · 119 · spans FULL SCAN · · 120 121 # Test the case when the DistinctOn operator is projecting away a column. 122 query TTTTT 123 EXPLAIN (VERBOSE) SELECT DISTINCT z FROM (SELECT y, z FROM xyz WHERE y > 1) 124 ---- 125 · distributed false · · 126 · vectorized true · · 127 distinct · · (z) · 128 │ distinct on z · · 129 │ order key z · · 130 └── render · · (z) +z 131 │ render 0 z · · 132 └── scan · · (y, z) +z 133 · table xyz@foo · · 134 · spans FULL SCAN · · 135 · filter y > 1 · · 136 137 statement ok 138 CREATE TABLE abcd ( 139 a INT, 140 b INT, 141 c INT, 142 d INT NOT NULL, 143 PRIMARY KEY (a, b, c), 144 UNIQUE INDEX (d, b) 145 ) 146 147 query TTTTT 148 EXPLAIN (VERBOSE) SELECT DISTINCT 1 AS z, d, b FROM abcd ORDER BY d, b 149 ---- 150 · distributed false · · 151 · vectorized true · · 152 render · · (z, d, b) · 153 │ render 0 1 · · 154 │ render 1 d · · 155 │ render 2 b · · 156 └── scan · · (b, d) +d,+b 157 · table abcd@abcd_d_b_key · · 158 · spans FULL SCAN · · 159 160 query TTTTT 161 EXPLAIN (VERBOSE) SELECT DISTINCT a, b FROM abcd 162 ---- 163 · distributed false · · 164 · vectorized true · · 165 distinct · · (a, b) · 166 │ distinct on a, b · · 167 │ order key a, b · · 168 └── scan · · (a, b) +a,+b 169 · table abcd@primary · · 170 · spans FULL SCAN · · 171 172 query TTTTT 173 EXPLAIN (VERBOSE) SELECT DISTINCT a, b, c FROM abcd 174 ---- 175 · distributed false · · 176 · vectorized true · · 177 scan · · (a, b, c) · 178 · table abcd@primary · · 179 · spans FULL SCAN · · 180 181 query TTTTT 182 EXPLAIN (VERBOSE) SELECT DISTINCT a, b, c, d FROM abcd 183 ---- 184 · distributed false · · 185 · vectorized true · · 186 scan · · (a, b, c, d) · 187 · table abcd@primary · · 188 · spans FULL SCAN · · 189 190 statement ok 191 CREATE TABLE kv (k INT PRIMARY KEY, v INT, UNIQUE INDEX idx(v)) 192 193 query TTTTT 194 EXPLAIN (VERBOSE) SELECT DISTINCT v FROM kv 195 ---- 196 · distributed false · · 197 · vectorized true · · 198 distinct · · (v) · 199 │ distinct on v · · 200 │ order key v · · 201 └── scan · · (v) +v 202 · table kv@idx · · 203 · spans FULL SCAN · · 204 205 # Verify we don't incorrectly elide the distinct node when we only have a weak key (#19343). 206 query TTTTT 207 EXPLAIN (VERBOSE) SELECT DISTINCT v FROM kv@idx 208 ---- 209 · distributed false · · 210 · vectorized true · · 211 distinct · · (v) · 212 │ distinct on v · · 213 │ order key v · · 214 └── scan · · (v) +v 215 · table kv@idx · · 216 · spans FULL SCAN · · 217 218 # Here we can infer that v is not-NULL so eliding the node is correct. 219 query TTTTT 220 EXPLAIN (VERBOSE) SELECT DISTINCT v FROM kv@idx WHERE v > 0 221 ---- 222 · distributed false · · 223 · vectorized true · · 224 scan · · (v) · 225 · table kv@idx · · 226 · spans /1- · · 227 228 statement ok 229 CREATE TABLE kv2 (k INT PRIMARY KEY, v INT NOT NULL, UNIQUE INDEX idx(v)) 230 231 # In this case it is correct to elide the distinct node. 232 query TTTTT 233 EXPLAIN (VERBOSE) SELECT DISTINCT v FROM kv2@idx 234 ---- 235 · distributed false · · 236 · vectorized true · · 237 scan · · (v) · 238 · table kv2@idx · · 239 · spans FULL SCAN · ·