github.com/cockroachdb/cockroach@v20.2.0-alpha.1+incompatible/pkg/sql/opt/testutils/opttester/testdata/explore-trace (about) 1 exec-ddl 2 CREATE TABLE ab (a INT PRIMARY KEY, b INT, INDEX(b)) 3 ---- 4 5 exploretrace 6 SELECT * FROM ab WHERE b=1 7 ---- 8 ---- 9 ================================================================================ 10 GenerateIndexScans 11 ================================================================================ 12 Source expression: 13 select 14 ├── columns: a:1(int!null) b:2(int!null) 15 ├── key: (1) 16 ├── fd: ()-->(2) 17 ├── scan ab 18 │ ├── columns: a:1(int!null) b:2(int) 19 │ ├── key: (1) 20 │ └── fd: (1)-->(2) 21 └── filters 22 └── eq [type=bool, outer=(2), constraints=(/2: [/1 - /1]; tight), fd=()-->(2)] 23 ├── variable: b:2 [type=int] 24 └── const: 1 [type=int] 25 26 New expression 1 of 1: 27 select 28 ├── columns: a:1(int!null) b:2(int!null) 29 ├── key: (1) 30 ├── fd: ()-->(2) 31 ├── scan ab@secondary 32 │ ├── columns: a:1(int!null) b:2(int) 33 │ ├── key: (1) 34 │ └── fd: (1)-->(2) 35 └── filters 36 └── eq [type=bool, outer=(2), constraints=(/2: [/1 - /1]; tight), fd=()-->(2)] 37 ├── variable: b:2 [type=int] 38 └── const: 1 [type=int] 39 40 ================================================================================ 41 GenerateZigzagJoins 42 ================================================================================ 43 Source expression: 44 select 45 ├── columns: a:1(int!null) b:2(int!null) 46 ├── key: (1) 47 ├── fd: ()-->(2) 48 ├── scan ab 49 │ ├── columns: a:1(int!null) b:2(int) 50 │ ├── key: (1) 51 │ └── fd: (1)-->(2) 52 └── filters 53 └── eq [type=bool, outer=(2), constraints=(/2: [/1 - /1]; tight), fd=()-->(2)] 54 ├── variable: b:2 [type=int] 55 └── const: 1 [type=int] 56 57 No new expressions. 58 59 ================================================================================ 60 GenerateConstrainedScans 61 ================================================================================ 62 Source expression: 63 select 64 ├── columns: a:1(int!null) b:2(int!null) 65 ├── key: (1) 66 ├── fd: ()-->(2) 67 ├── scan ab 68 │ ├── columns: a:1(int!null) b:2(int) 69 │ ├── key: (1) 70 │ └── fd: (1)-->(2) 71 └── filters 72 └── eq [type=bool, outer=(2), constraints=(/2: [/1 - /1]; tight), fd=()-->(2)] 73 ├── variable: b:2 [type=int] 74 └── const: 1 [type=int] 75 76 New expression 1 of 1: 77 scan ab@secondary 78 ├── columns: a:1(int!null) b:2(int!null) 79 ├── constraint: /2/1: [/1 - /1] 80 ├── key: (1) 81 └── fd: ()-->(2) 82 ---- 83 ---- 84 85 exec-ddl 86 CREATE TABLE parent (pid INT PRIMARY KEY, pa INT) 87 ---- 88 89 exec-ddl 90 CREATE TABLE child ( 91 pid INT, 92 cid INT, 93 ca INT, 94 PRIMARY KEY(pid, cid) 95 ) 96 ---- 97 98 exec-ddl 99 CREATE TABLE grandchild ( 100 pid INT, 101 cid INT, 102 gcid INT, 103 gca INT, 104 PRIMARY KEY(pid, cid, gcid) 105 ) 106 ---- 107 108 # Regression test for 36225. 109 exploretrace join-limit=4 rule=AssociateJoin skip-no-op format=hide-all 110 SELECT * FROM 111 grandchild 112 JOIN child USING (pid, cid) 113 JOIN parent USING (pid) 114 ORDER BY pid 115 ---- 116 ---- 117 ================================================================================ 118 AssociateJoin 119 ================================================================================ 120 Source expression: 121 sort 122 └── project 123 └── inner-join (hash) 124 ├── inner-join (merge) 125 │ ├── scan grandchild 126 │ ├── scan child 127 │ └── filters (true) 128 ├── scan parent 129 └── filters 130 └── grandchild.pid = parent.pid 131 132 New expression 1 of 1: 133 sort 134 └── project 135 └── inner-join (hash) 136 ├── scan grandchild 137 ├── inner-join (hash) 138 │ ├── scan child 139 │ ├── scan parent 140 │ └── filters 141 │ └── child.pid = parent.pid 142 └── filters 143 ├── grandchild.pid = child.pid 144 └── grandchild.cid = child.cid 145 146 ================================================================================ 147 AssociateJoin 148 ================================================================================ 149 Source expression: 150 sort 151 └── project 152 └── inner-join (hash) 153 ├── inner-join (merge) 154 │ ├── scan grandchild 155 │ ├── scan child 156 │ └── filters (true) 157 ├── scan parent 158 └── filters 159 └── grandchild.pid = parent.pid 160 161 New expression 1 of 1: 162 sort 163 └── project 164 └── inner-join (hash) 165 ├── scan child 166 ├── inner-join (hash) 167 │ ├── scan grandchild 168 │ ├── scan parent 169 │ └── filters 170 │ └── grandchild.pid = parent.pid 171 └── filters 172 ├── grandchild.pid = child.pid 173 └── grandchild.cid = child.cid 174 175 ================================================================================ 176 AssociateJoin 177 ================================================================================ 178 Source expression: 179 sort 180 └── project 181 └── inner-join (hash) 182 ├── inner-join (merge) 183 │ ├── scan child 184 │ ├── scan parent 185 │ └── filters (true) 186 ├── scan grandchild 187 └── filters 188 ├── grandchild.pid = child.pid 189 └── grandchild.cid = child.cid 190 191 New expression 1 of 1: 192 sort 193 └── project 194 └── inner-join (hash) 195 ├── scan child 196 ├── inner-join (merge) 197 │ ├── scan grandchild 198 │ ├── scan parent 199 │ └── filters (true) 200 └── filters 201 ├── grandchild.cid = child.cid 202 └── child.pid = grandchild.pid 203 204 ================================================================================ 205 AssociateJoin 206 ================================================================================ 207 Source expression: 208 sort 209 └── project 210 └── inner-join (hash) 211 ├── inner-join (merge) 212 │ ├── scan child 213 │ ├── scan parent 214 │ └── filters (true) 215 ├── scan grandchild 216 └── filters 217 ├── grandchild.pid = child.pid 218 └── grandchild.cid = child.cid 219 220 New expression 1 of 1: 221 sort 222 └── project 223 └── inner-join (hash) 224 ├── scan parent 225 ├── inner-join (merge) 226 │ ├── scan grandchild 227 │ ├── scan child 228 │ └── filters (true) 229 └── filters 230 └── child.pid = parent.pid 231 232 ================================================================================ 233 AssociateJoin 234 ================================================================================ 235 Source expression: 236 sort 237 └── project 238 └── inner-join (hash) 239 ├── inner-join (merge) 240 │ ├── scan grandchild 241 │ ├── scan parent 242 │ └── filters (true) 243 ├── scan child 244 └── filters 245 ├── grandchild.cid = child.cid 246 └── child.pid = grandchild.pid 247 248 New expression 1 of 1: 249 sort 250 └── project 251 └── inner-join (hash) 252 ├── scan parent 253 ├── inner-join (hash) 254 │ ├── scan grandchild 255 │ ├── scan child 256 │ └── filters 257 │ ├── grandchild.cid = child.cid 258 │ └── child.pid = grandchild.pid 259 └── filters 260 └── grandchild.pid = parent.pid 261 ---- 262 ----