diff --git a/pkg/sql/opt/indexrec/testdata/geospatial-index-candidates-recommendations b/pkg/sql/opt/indexrec/testdata/geospatial-index-candidates-recommendations index 54d2dcaf408b..c288a1da5b17 100644 --- a/pkg/sql/opt/indexrec/testdata/geospatial-index-candidates-recommendations +++ b/pkg/sql/opt/indexrec/testdata/geospatial-index-candidates-recommendations @@ -34,7 +34,7 @@ select ├── immutable ├── cost: 1054.09 ├── index-join t2 - │ ├── columns: t2.k:1 i:2 s:3 geom1:4 geog1:5 bbox1:6 bbox2:7 geom2:8 geog2:9 inet1:10 + │ ├── columns: k:1 i:2 s:3 geom1:4 geog1:5 bbox1:6 bbox2:7 geom2:8 geog2:9 inet1:10 │ ├── cost: 941.837778 │ └── inverted-filter │ ├── columns: rowid:11!null @@ -77,7 +77,7 @@ select │ ├── cost: 250.706667 │ ├── key: (11) │ └── scan t2@_hyp_1 - │ ├── columns: rowid:11!null k:14!null + │ ├── columns: rowid:11!null geom1_inverted_key:14!null │ ├── inverted constraint: /14/11 │ │ └── spans │ │ ├── ["B\xfd\x10\x00\x00\x00\x00\x00\x00\x00", "B\xfd\x10\x00\x00\x00\x00\x00\x00\x00"] @@ -136,7 +136,7 @@ select ├── immutable ├── cost: 1054.09 ├── index-join t2 - │ ├── columns: t2.k:1 i:2 s:3 geom1:4 geog1:5 bbox1:6 bbox2:7 geom2:8 geog2:9 inet1:10 + │ ├── columns: k:1 i:2 s:3 geom1:4 geog1:5 bbox1:6 bbox2:7 geom2:8 geog2:9 inet1:10 │ ├── cost: 941.837778 │ └── inverted-filter │ ├── columns: rowid:11!null @@ -179,7 +179,7 @@ select │ ├── cost: 250.706667 │ ├── key: (11) │ └── scan t2@_hyp_1 - │ ├── columns: rowid:11!null k:14!null + │ ├── columns: rowid:11!null geom2_inverted_key:14!null │ ├── inverted constraint: /14/11 │ │ └── spans │ │ ├── ["B\xfd\x10\x00\x00\x00\x00\x00\x00\x00", "B\xfd\x10\x00\x00\x00\x00\x00\x00\x00"] @@ -251,7 +251,7 @@ select ├── immutable ├── cost: 2246.15 ├── scan t2 - │ ├── columns: t2.k:1 i:2 s:3 geom1:4 geog1:5 bbox1:6 bbox2:7 geom2:8 geog2:9 inet1:10 + │ ├── columns: k:1 i:2 s:3 geom1:4 geog1:5 bbox1:6 bbox2:7 geom2:8 geog2:9 inet1:10 │ └── cost: 1236.12 └── filters └── st_coveredby(geom1:4, geom2:8) [outer=(4,8), immutable, constraints=(/4: (/NULL - ]; /8: (/NULL - ])] @@ -282,7 +282,7 @@ select ├── immutable ├── cost: 12054.09 ├── index-join t2 - │ ├── columns: t2.k:1 i:2 s:3 geom1:4 geog1:5 bbox1:6 bbox2:7 geom2:8 geog2:9 inet1:10 + │ ├── columns: k:1 i:2 s:3 geom1:4 geog1:5 bbox1:6 bbox2:7 geom2:8 geog2:9 inet1:10 │ ├── cost: 941.837778 │ └── inverted-filter │ ├── columns: rowid:11!null @@ -325,7 +325,7 @@ select │ ├── cost: 250.706667 │ ├── key: (11) │ └── scan t2@_hyp_1 - │ ├── columns: rowid:11!null k:14!null + │ ├── columns: rowid:11!null geom2_inverted_key:14!null │ ├── inverted constraint: /14/11 │ │ └── spans │ │ ├── ["B\xfd\x10\x00\x00\x00\x00\x00\x00\x00", "B\xfd\x10\x00\x00\x00\x00\x00\x00\x00"] @@ -383,7 +383,7 @@ select ├── immutable ├── cost: 101246.15 ├── scan t2 - │ ├── columns: t2.k:1 i:2 s:3 geom1:4 geog1:5 bbox1:6 bbox2:7 geom2:8 geog2:9 inet1:10 + │ ├── columns: k:1 i:2 s:3 geom1:4 geog1:5 bbox1:6 bbox2:7 geom2:8 geog2:9 inet1:10 │ └── cost: 1236.12 └── filters └── st_containsproperly(geom1:4, geom2:8) [outer=(4,8), immutable, constraints=(/4: (/NULL - ]; /8: (/NULL - ])] @@ -406,7 +406,7 @@ select ├── immutable ├── cost: 101246.15 ├── scan t2 - │ ├── columns: t2.k:1 i:2 s:3 geom1:4 geog1:5 bbox1:6 bbox2:7 geom2:8 geog2:9 inet1:10 + │ ├── columns: k:1 i:2 s:3 geom1:4 geog1:5 bbox1:6 bbox2:7 geom2:8 geog2:9 inet1:10 │ └── cost: 1236.12 └── filters └── st_crosses(geom1:4, geom2:8) [outer=(4,8), immutable, constraints=(/4: (/NULL - ]; /8: (/NULL - ])] @@ -444,7 +444,7 @@ select ├── immutable ├── cost: 12054.09 ├── index-join t2 - │ ├── columns: t2.k:1 i:2 s:3 geom1:4 geog1:5 bbox1:6 bbox2:7 geom2:8 geog2:9 inet1:10 + │ ├── columns: k:1 i:2 s:3 geom1:4 geog1:5 bbox1:6 bbox2:7 geom2:8 geog2:9 inet1:10 │ ├── cost: 941.837778 │ └── inverted-filter │ ├── columns: rowid:11!null @@ -487,7 +487,7 @@ select │ ├── cost: 250.706667 │ ├── key: (11) │ └── scan t2@_hyp_1 - │ ├── columns: rowid:11!null k:14!null + │ ├── columns: rowid:11!null geom1_inverted_key:14!null │ ├── inverted constraint: /14/11 │ │ └── spans │ │ ├── ["B\xfd\x10\x00\x00\x00\x00\x00\x00\x00", "B\xfd\x10\x00\x00\x00\x00\x00\x00\x00"] @@ -546,7 +546,7 @@ select ├── immutable ├── cost: 1058.09 ├── index-join t2 - │ ├── columns: t2.k:1 i:2 s:3 geom1:4 geog1:5 bbox1:6 bbox2:7 geom2:8 geog2:9 inet1:10 + │ ├── columns: k:1 i:2 s:3 geom1:4 geog1:5 bbox1:6 bbox2:7 geom2:8 geog2:9 inet1:10 │ ├── cost: 945.837778 │ └── inverted-filter │ ├── columns: rowid:11!null @@ -590,7 +590,7 @@ select │ ├── cost: 254.706667 │ ├── key: (11) │ └── scan t2@_hyp_1 - │ ├── columns: rowid:11!null k:14!null + │ ├── columns: rowid:11!null geom1_inverted_key:14!null │ ├── inverted constraint: /14/11 │ │ └── spans │ │ ├── ["B\xfd\x10\x00\x00\x00\x00\x00\x00\x00", "B\xfd\x10\x00\x00\x00\x00\x00\x00\x00"] @@ -649,7 +649,7 @@ select ├── immutable ├── cost: 101246.15 ├── scan t2 - │ ├── columns: t2.k:1 i:2 s:3 geom1:4 geog1:5 bbox1:6 bbox2:7 geom2:8 geog2:9 inet1:10 + │ ├── columns: k:1 i:2 s:3 geom1:4 geog1:5 bbox1:6 bbox2:7 geom2:8 geog2:9 inet1:10 │ └── cost: 1236.12 └── filters └── st_overlaps(geom1:4, geom2:8) [outer=(4,8), immutable, constraints=(/4: (/NULL - ]; /8: (/NULL - ])] @@ -693,7 +693,7 @@ select ├── immutable ├── cost: 926.978889 ├── index-join t2 - │ ├── columns: t2.k:1 i:2 s:3 geom1:4 geog1:5 bbox1:6 bbox2:7 geom2:8 geog2:9 inet1:10 + │ ├── columns: k:1 i:2 s:3 geom1:4 geog1:5 bbox1:6 bbox2:7 geom2:8 geog2:9 inet1:10 │ ├── cost: 925.837778 │ └── inverted-filter │ ├── columns: rowid:11!null @@ -732,7 +732,7 @@ select │ ├── cost: 234.706667 │ ├── key: (11) │ └── scan t2@_hyp_1 - │ ├── columns: rowid:11!null k:14!null + │ ├── columns: rowid:11!null geog2_inverted_key:14!null │ ├── inverted constraint: /14/11 │ │ └── spans │ │ ├── ["B\xfdL\x00\x00\x00\x00\x00\x00\x00", "B\xfdL\x00\x00\x00\x00\x00\x00\x00"] @@ -786,7 +786,7 @@ select ├── immutable ├── cost: 1246.15 ├── scan t2 - │ ├── columns: t2.k:1 i:2 s:3 geom1:4 geog1:5 bbox1:6 bbox2:7 geom2:8 geog2:9 inet1:10 + │ ├── columns: k:1 i:2 s:3 geom1:4 geog1:5 bbox1:6 bbox2:7 geom2:8 geog2:9 inet1:10 │ └── cost: 1236.12 └── filters └── st_dwithinexclusive(geog1:5, geog2:9, 10.0) [outer=(5,9), immutable, constraints=(/5: (/NULL - ]; /9: (/NULL - ])] @@ -824,7 +824,7 @@ select ├── immutable ├── cost: 1221.85 ├── scan t2@_hyp_1 - │ ├── columns: t2.k:1 i:2 s:3 geom1:4 geog1:5 bbox1:6!null bbox2:7 geom2:8 geog2:9 inet1:10 + │ ├── columns: k:1 i:2 s:3 geom1:4 geog1:5 bbox1:6!null bbox2:7 geom2:8 geog2:9 inet1:10 │ ├── constraint: /6/11: (/NULL - ] │ └── cost: 1211.92 └── filters @@ -855,7 +855,7 @@ select ├── immutable ├── cost: 946.988889 ├── index-join t2 - │ ├── columns: t2.k:1 i:2 s:3 geom1:4 geog1:5 bbox1:6 bbox2:7 geom2:8 geog2:9 inet1:10 + │ ├── columns: k:1 i:2 s:3 geom1:4 geog1:5 bbox1:6 bbox2:7 geom2:8 geog2:9 inet1:10 │ ├── cost: 945.837778 │ └── inverted-filter │ ├── columns: rowid:11!null @@ -899,7 +899,7 @@ select │ ├── cost: 254.706667 │ ├── key: (11) │ └── scan t2@_hyp_3 - │ ├── columns: rowid:11!null k:14!null + │ ├── columns: rowid:11!null geom1_inverted_key:14!null │ ├── inverted constraint: /14/11 │ │ └── spans │ │ ├── ["B\xfd\x10\x00\x00\x00\x00\x00\x00\x00", "B\xfd\x10\x00\x00\x00\x00\x00\x00\x00"] @@ -1055,7 +1055,7 @@ select ├── immutable ├── cost: 23165.2111 ├── index-join t2 - │ ├── columns: t2.k:1 i:2 s:3 geom1:4 geog1:5 bbox1:6 bbox2:7 geom2:8 geog2:9 inet1:10 + │ ├── columns: k:1 i:2 s:3 geom1:4 geog1:5 bbox1:6 bbox2:7 geom2:8 geog2:9 inet1:10 │ ├── cost: 941.837778 │ └── inverted-filter │ ├── columns: rowid:11!null @@ -1098,7 +1098,7 @@ select │ ├── cost: 250.706667 │ ├── key: (11) │ └── scan t2@_hyp_1 - │ ├── columns: rowid:11!null k:14!null + │ ├── columns: rowid:11!null geom1_inverted_key:14!null │ ├── inverted constraint: /14/11 │ │ └── spans │ │ ├── ["B\xfd\x10\x00\x00\x00\x00\x00\x00\x00", "B\xfd\x10\x00\x00\x00\x00\x00\x00\x00"] @@ -1162,7 +1162,7 @@ select ├── cost: 133.301112 ├── fd: ()-->(1) ├── index-join t2 - │ ├── columns: t2.k:1 i:2 s:3 geom1:4 geog1:5 bbox1:6 bbox2:7 geom2:8 geog2:9 inet1:10 + │ ├── columns: k:1 i:2 s:3 geom1:4 geog1:5 bbox1:6 bbox2:7 geom2:8 geog2:9 inet1:10 │ ├── cost: 22.148889 │ └── inverted-filter │ ├── columns: rowid:11!null @@ -1205,7 +1205,7 @@ select │ ├── cost: 15.2177778 │ ├── key: (11) │ └── scan t2@_hyp_3 - │ ├── columns: rowid:11!null k:15!null + │ ├── columns: rowid:11!null geom1_inverted_key:15!null │ ├── constraint: /1: [/2 - /2] │ ├── inverted constraint: /15/11 │ │ └── spans @@ -1267,7 +1267,7 @@ select ├── immutable ├── cost: 12054.1 ├── index-join t2 - │ ├── columns: t2.k:1 i:2 s:3 geom1:4 geog1:5 bbox1:6 bbox2:7 geom2:8 geog2:9 inet1:10 + │ ├── columns: k:1 i:2 s:3 geom1:4 geog1:5 bbox1:6 bbox2:7 geom2:8 geog2:9 inet1:10 │ ├── cost: 941.837778 │ └── inverted-filter │ ├── columns: rowid:11!null @@ -1310,7 +1310,7 @@ select │ ├── cost: 250.706667 │ ├── key: (11) │ └── scan t2@_hyp_2 - │ ├── columns: rowid:11!null k:14!null + │ ├── columns: rowid:11!null geom1_inverted_key:14!null │ ├── inverted constraint: /14/11 │ │ └── spans │ │ ├── ["B\xfd\x10\x00\x00\x00\x00\x00\x00\x00", "B\xfd\x10\x00\x00\x00\x00\x00\x00\x00"] @@ -1349,7 +1349,7 @@ select │ └── fd: (11)-->(14) └── filters ├── st_overlaps(geom1:4, '01010000C00000000000000000000000000000000000000000000000000000000000000000') [outer=(4), immutable, constraints=(/4: (/NULL - ])] - └── t2.k:1 > 2 [outer=(1), constraints=(/1: [/3 - ]; tight)] + └── k:1 > 2 [outer=(1), constraints=(/1: [/3 - ]; tight)] # 4.Geospatial inverted + EQ + EQ: combined index (inverted + equal, inverted + # equal group, equal group candidates) @@ -1385,7 +1385,7 @@ inner-join (zigzag t2@_hyp_1 t2@_hyp_2) ├── fd: ()-->(1,2) └── filters ├── st_overlaps(geom1:4, '01010000C00000000000000000000000000000000000000000000000000000000000000000') [outer=(4), immutable, constraints=(/4: (/NULL - ])] - ├── t2.k:1 = 2 [outer=(1), constraints=(/1: [/2 - /2]; tight), fd=()-->(1)] + ├── k:1 = 2 [outer=(1), constraints=(/1: [/2 - /2]; tight), fd=()-->(1)] └── i:2 = 3 [outer=(2), constraints=(/2: [/3 - /3]; tight), fd=()-->(2)] # 5. Geospatial inverted + R + R: combined index (inverted + equal, inverted + @@ -1411,7 +1411,7 @@ select ├── immutable ├── cost: 12054.11 ├── index-join t2 - │ ├── columns: t2.k:1 i:2 s:3 geom1:4 geog1:5 bbox1:6 bbox2:7 geom2:8 geog2:9 inet1:10 + │ ├── columns: k:1 i:2 s:3 geom1:4 geog1:5 bbox1:6 bbox2:7 geom2:8 geog2:9 inet1:10 │ ├── cost: 941.837778 │ └── inverted-filter │ ├── columns: rowid:11!null @@ -1454,7 +1454,7 @@ select │ ├── cost: 250.706667 │ ├── key: (11) │ └── scan t2@_hyp_3 - │ ├── columns: rowid:11!null k:14!null + │ ├── columns: rowid:11!null geom1_inverted_key:14!null │ ├── inverted constraint: /14/11 │ │ └── spans │ │ ├── ["B\xfd\x10\x00\x00\x00\x00\x00\x00\x00", "B\xfd\x10\x00\x00\x00\x00\x00\x00\x00"] @@ -1493,7 +1493,7 @@ select │ └── fd: (11)-->(14) └── filters ├── st_overlaps(geom1:4, '01010000C00000000000000000000000000000000000000000000000000000000000000000') [outer=(4), immutable, constraints=(/4: (/NULL - ])] - ├── t2.k:1 > 2 [outer=(1), constraints=(/1: [/3 - ]; tight)] + ├── k:1 > 2 [outer=(1), constraints=(/1: [/3 - ]; tight)] └── i:2 > 3 [outer=(2), constraints=(/2: [/4 - ]; tight)] # 6. Geospatial inverted + EQ + R: combined index (inverted + equal, equal + @@ -1607,7 +1607,7 @@ select ├── cost: 22.1900001 ├── fd: ()-->(1) ├── index-join t2 - │ ├── columns: t2.k:1 i:2 s:3 geom1:4 geog1:5 bbox1:6 bbox2:7 geom2:8 geog2:9 inet1:10 + │ ├── columns: k:1 i:2 s:3 geom1:4 geog1:5 bbox1:6 bbox2:7 geom2:8 geog2:9 inet1:10 │ ├── cost: 22.148889 │ └── inverted-filter │ ├── columns: rowid:11!null @@ -1651,7 +1651,7 @@ select │ ├── cost: 15.2177778 │ ├── key: (11) │ └── scan t2@_hyp_3 - │ ├── columns: rowid:11!null k:15!null + │ ├── columns: rowid:11!null geom1_inverted_key:15!null │ ├── constraint: /1: [/2 - /2] │ ├── inverted constraint: /15/11 │ │ └── spans @@ -1716,7 +1716,7 @@ select ├── immutable ├── cost: 420.726667 ├── scan t2@_hyp_3 - │ ├── columns: t2.k:1!null i:2 s:3 geom1:4 geog1:5 bbox1:6 bbox2:7 geom2:8 geog2:9 inet1:10 + │ ├── columns: k:1!null i:2 s:3 geom1:4 geog1:5 bbox1:6 bbox2:7 geom2:8 geog2:9 inet1:10 │ ├── constraint: /1/11: [/3 - ] │ └── cost: 417.353333 └── filters @@ -1743,11 +1743,11 @@ select ├── immutable ├── cost: 2246.16 ├── scan t2 - │ ├── columns: t2.k:1 i:2 s:3 geom1:4 geog1:5 bbox1:6 bbox2:7 geom2:8 geog2:9 inet1:10 + │ ├── columns: k:1 i:2 s:3 geom1:4 geog1:5 bbox1:6 bbox2:7 geom2:8 geog2:9 inet1:10 │ └── cost: 1236.12 └── filters ├── st_covers(geom1:4, geom2:8) [outer=(4,8), immutable, constraints=(/4: (/NULL - ]; /8: (/NULL - ])] - └── (~t2.k:1) = 1 [outer=(1), immutable] + └── (~k:1) = 1 [outer=(1), immutable] # 16. Geospatial Inverted + J + EQ: combined index between join + equal, # inverted + equal diff --git a/pkg/sql/opt/indexrec/testdata/index-candidates-recommendations b/pkg/sql/opt/indexrec/testdata/index-candidates-recommendations index fd3722e6f09d..601fcb3c89b5 100644 --- a/pkg/sql/opt/indexrec/testdata/index-candidates-recommendations +++ b/pkg/sql/opt/indexrec/testdata/index-candidates-recommendations @@ -1208,7 +1208,7 @@ project ├── immutable ├── cost: 807.393333 └── index-join t4 - ├── columns: t4.k:1 f:3 j:4 + ├── columns: k:1 f:3 j:4 ├── immutable ├── cost: 806.262222 └── scan t4@_hyp_1 @@ -1237,7 +1237,7 @@ project ├── immutable ├── cost: 805.048889 └── index-join t4 - ├── columns: t4.k:1 f:3 j:4!null + ├── columns: k:1 f:3 j:4!null ├── immutable ├── cost: 803.928889 └── scan t4@_hyp_1 @@ -1266,11 +1266,11 @@ project ├── immutable ├── cost: 816.998889 └── select - ├── columns: t4.k:1 f:3 j:4 + ├── columns: k:1 f:3 j:4 ├── immutable ├── cost: 813.645556 ├── index-join t4 - │ ├── columns: t4.k:1 f:3 j:4 + │ ├── columns: k:1 f:3 j:4 │ ├── cost: 812.504444 │ └── inverted-filter │ ├── columns: rowid:6!null @@ -1282,7 +1282,7 @@ project │ ├── cost: 134.706667 │ ├── key: (6) │ └── scan t4@_hyp_1 - │ ├── columns: rowid:6!null k:9!null + │ ├── columns: rowid:6!null j_inverted_key:9!null │ ├── inverted constraint: /9/6 │ │ └── spans │ │ ├── ["7\x00\x019", "7\x00\x019"] @@ -1345,12 +1345,12 @@ project ├── cost: 22.1100001 ├── fd: ()-->(1) └── select - ├── columns: t4.k:1!null f:3 j:4 + ├── columns: k:1!null f:3 j:4 ├── immutable ├── cost: 22.0566667 ├── fd: ()-->(1) ├── index-join t4 - │ ├── columns: t4.k:1 f:3 j:4 + │ ├── columns: k:1 f:3 j:4 │ ├── cost: 22.0155556 │ └── inverted-filter │ ├── columns: rowid:6!null @@ -1362,7 +1362,7 @@ project │ ├── cost: 15.2177778 │ ├── key: (6) │ └── scan t4@_hyp_3 - │ ├── columns: rowid:6!null k:10!null + │ ├── columns: rowid:6!null j_inverted_key:10!null │ ├── constraint: /1: [/1 - /1] │ ├── inverted constraint: /10/6 │ │ └── spans @@ -1402,7 +1402,7 @@ project ├── cost: 10.7379279 ├── fd: ()-->(1) └── inner-join (zigzag t4@_hyp_1 t4@_hyp_2) - ├── columns: t4.k:1!null i:2!null f:3 j:4 + ├── columns: k:1!null i:2!null f:3 j:4 ├── eq columns: [6] = [6] ├── left fixed columns: [1] = [1] ├── right fixed columns: [2] = [2] @@ -1411,7 +1411,7 @@ project ├── fd: ()-->(1,2) └── filters ├── j:4 <@ '{"foo": "1"}' [outer=(4), immutable] - ├── t4.k:1 = 1 [outer=(1), constraints=(/1: [/1 - /1]; tight), fd=()-->(1)] + ├── k:1 = 1 [outer=(1), constraints=(/1: [/1 - /1]; tight), fd=()-->(1)] └── i:2 = 2 [outer=(2), constraints=(/2: [/2 - /2]; tight), fd=()-->(2)] index-candidates @@ -1431,12 +1431,12 @@ project ├── immutable ├── cost: 1125.07 └── select - ├── columns: t4.k:1 f:3 j:4 + ├── columns: k:1 f:3 j:4 ├── immutable ├── cost: 1124.95 ├── fd: ()-->(4) ├── scan t4 - │ ├── columns: t4.k:1 f:3 j:4 + │ ├── columns: k:1 f:3 j:4 │ └── cost: 1114.92 └── filters └── j:4 IS NULL [outer=(4), immutable, constraints=(/4: [/NULL - /NULL]; tight), fd=()-->(4)] @@ -1457,11 +1457,11 @@ project ├── columns: k:1 f:3 ├── cost: 1125.07 └── select - ├── columns: t4.k:1 f:3 a:5 + ├── columns: k:1 f:3 a:5 ├── cost: 1124.95 ├── fd: ()-->(5) ├── scan t4 - │ ├── columns: t4.k:1 f:3 a:5 + │ ├── columns: k:1 f:3 a:5 │ └── cost: 1114.92 └── filters └── a:5 IS NULL [outer=(5), constraints=(/5: [/NULL - /NULL]; tight), fd=()-->(5)] @@ -1485,7 +1485,7 @@ project ├── immutable ├── cost: 805.048889 └── index-join t4 - ├── columns: t4.k:1 f:3 a:5!null + ├── columns: k:1 f:3 a:5!null ├── immutable ├── cost: 803.928889 └── scan t4@_hyp_1 @@ -1511,11 +1511,11 @@ project ├── columns: k:1 f:3 ├── cost: 1125.07 └── select - ├── columns: t4.k:1 f:3 a:5!null + ├── columns: k:1 f:3 a:5!null ├── cost: 1124.95 ├── fd: ()-->(5) ├── scan t4 - │ ├── columns: t4.k:1 f:3 a:5 + │ ├── columns: k:1 f:3 a:5 │ └── cost: 1114.92 └── filters └── a:5 = ARRAY[1] [outer=(5), constraints=(/5: [/ARRAY[1] - /ARRAY[1]]; tight), fd=()-->(5)] @@ -1541,7 +1541,7 @@ project ├── immutable ├── cost: 21.9920001 └── index-join t4 - ├── columns: t4.k:1 i:2!null f:3 a:5!null + ├── columns: k:1 i:2!null f:3 a:5!null ├── immutable ├── cost: 21.9610001 ├── fd: ()-->(2) @@ -1573,11 +1573,11 @@ project ├── immutable ├── cost: 381.103333 └── select - ├── columns: t4.k:1 f:3!null a:5!null + ├── columns: k:1 f:3!null a:5!null ├── immutable ├── cost: 380.716667 ├── scan t4@_hyp_1 - │ ├── columns: t4.k:1 f:3!null a:5 + │ ├── columns: k:1 f:3!null a:5 │ ├── constraint: /3/6: [/3.0000000000000004 - ] │ └── cost: 377.353333 └── filters @@ -1775,3 +1775,82 @@ project exec-ddl DROP INDEX t1@expr ---- + +# Regression test for #83965. +exec-ddl +CREATE TABLE t83965a (c INT); +---- + +exec-ddl +CREATE TABLE t83965b (c INT); +---- + +exec-ddl +CREATE TABLE t83965c (c INT); +---- + +exec-ddl +CREATE TABLE t83965d (c INT); +---- + +exec-ddl +CREATE TABLE t83965e (c VARBIT(1)[]); +---- + +exec-ddl +CREATE TABLE t83965f (c INT); +---- + +index-recommendations +SELECT bool_and(t83965e.c < t83965e.c) FROM t83965f, t83965a, t83965c, t83965b, t83965d, t83965e +---- +No index recommendations. +-- +Optimal Plan. +scalar-group-by + ├── columns: bool_and:26 + ├── cardinality: [1 - 1] + ├── cost: 4.00225225e+16 + ├── key: () + ├── fd: ()-->(26) + ├── project + │ ├── columns: column25:25 + │ ├── cost: 3.00225225e+16 + │ ├── inner-join (cross) + │ │ ├── columns: t83965e.c:21 + │ │ ├── cost: 1.00225225e+16 + │ │ ├── inner-join (cross) + │ │ │ ├── columns: t83965e.c:21 + │ │ │ ├── cost: 1.00225225e+13 + │ │ │ ├── inner-join (cross) + │ │ │ │ ├── columns: t83965e.c:21 + │ │ │ │ ├── cost: 1.00225268e+10 + │ │ │ │ ├── inner-join (cross) + │ │ │ │ │ ├── columns: t83965e.c:21 + │ │ │ │ │ ├── cost: 10025690.6 + │ │ │ │ │ ├── inner-join (cross) + │ │ │ │ │ │ ├── columns: t83965e.c:21 + │ │ │ │ │ │ ├── cost: 12128.7063 + │ │ │ │ │ │ ├── scan t83965d + │ │ │ │ │ │ │ └── cost: 1044.22 + │ │ │ │ │ │ ├── scan t83965e + │ │ │ │ │ │ │ ├── columns: t83965e.c:21 + │ │ │ │ │ │ │ └── cost: 1054.32 + │ │ │ │ │ │ └── filters (true) + │ │ │ │ │ ├── scan t83965b + │ │ │ │ │ │ └── cost: 1044.22 + │ │ │ │ │ └── filters (true) + │ │ │ │ ├── scan t83965c + │ │ │ │ │ └── cost: 1044.22 + │ │ │ │ └── filters (true) + │ │ │ ├── scan t83965a + │ │ │ │ └── cost: 1044.22 + │ │ │ └── filters (true) + │ │ ├── scan t83965f + │ │ │ └── cost: 1044.22 + │ │ └── filters (true) + │ └── projections + │ └── (t83965e.c:21 IS NOT DISTINCT FROM CAST(NULL AS VARBIT(1)[])) AND CAST(NULL AS BOOL) [as=column25:25, outer=(21)] + └── aggregations + └── bool-and [as=bool_and:26, outer=(25)] + └── column25:25 diff --git a/pkg/sql/opt/metadata.go b/pkg/sql/opt/metadata.go index f9ff3025a00e..060aa495d9e8 100644 --- a/pkg/sql/opt/metadata.go +++ b/pkg/sql/opt/metadata.go @@ -610,14 +610,15 @@ func (md *Metadata) QualifiedAlias(colID ColumnID, fullyQualify bool, catalog ca // TableMeta instance stores. func (md *Metadata) UpdateTableMeta(tables map[cat.StableID]cat.Table) { for i := range md.tables { - if tab, ok := tables[md.tables[i].Table.ID()]; ok { + oldTable := md.tables[i].Table + if newTable, ok := tables[oldTable.ID()]; ok { // If there are any inverted hypothetical indexes, the hypothetical table // will have extra inverted columns added. Add any new inverted columns to // the metadata. - for j, n := md.tables[i].Table.ColumnCount(), tab.ColumnCount(); j < n; j++ { - md.AddColumn(string(tab.Column(i).ColName()), types.Bytes) + for j, n := oldTable.ColumnCount(), newTable.ColumnCount(); j < n; j++ { + md.AddColumn(string(newTable.Column(j).ColName()), types.Bytes) } - md.tables[i].Table = tab + md.tables[i].Table = newTable } } }