-
Notifications
You must be signed in to change notification settings - Fork 5.9k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
planner, statistics: use the correct column ID when recording stats loading status #52208
Changes from 4 commits
c35daf5
e60c752
72dfc6a
33291ed
a44e2b2
93eb1e6
51918df
a7eab99
9808c88
a320f42
65c5878
6758bd7
688b40d
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -45,7 +45,11 @@ func GetRowCountByColumnRanges(sctx context.PlanContext, coll *statistics.HistCo | |
} | ||
sc := sctx.GetSessionVars().StmtCtx | ||
c, ok := coll.Columns[colID] | ||
recordUsedItemStatsStatus(sctx, c, coll.PhysicalID, colID) | ||
colInfoID := colID | ||
if len(coll.UniqueID2colInfoID) > 0 { | ||
colInfoID = coll.UniqueID2colInfoID[colID] | ||
} | ||
recordUsedItemStatsStatus(sctx, c, coll.PhysicalID, colInfoID) | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Maybe we should distinguish colId and colUniqueId in explain such as "colID: xxx" , "colUniqueID: XXX" There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. We want the column name in the EXPLAIN result, which should be fetched using the column ID from the metadata instead of the |
||
if c != nil && c.Info != nil { | ||
name = c.Info.Name.O | ||
} | ||
|
@@ -83,7 +87,11 @@ func GetRowCountByIntColumnRanges(sctx context.PlanContext, coll *statistics.His | |
} | ||
sc := sctx.GetSessionVars().StmtCtx | ||
c, ok := coll.Columns[colID] | ||
recordUsedItemStatsStatus(sctx, c, coll.PhysicalID, colID) | ||
colInfoID := colID | ||
if len(coll.UniqueID2colInfoID) > 0 { | ||
colInfoID = coll.UniqueID2colInfoID[colID] | ||
} | ||
recordUsedItemStatsStatus(sctx, c, coll.PhysicalID, colInfoID) | ||
if c != nil && c.Info != nil { | ||
name = c.Info.Name.O | ||
} | ||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -215,12 +215,16 @@ const ( | |
|
||
// HistColl is a collection of histogram. It collects enough information for plan to calculate the selectivity. | ||
type HistColl struct { | ||
// Note that Column use UniqueID as the key while Indices use the index ID in the metadata. | ||
Columns map[int64]*Column | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Big thanks for refactoring this structure! |
||
Indices map[int64]*Index | ||
// Idx2ColumnIDs maps the index id to its column ids. It's used to calculate the selectivity in planner. | ||
// Idx2ColumnIDs maps the index id to its column UniqueIDs. It's used to calculate the selectivity in planner. | ||
Idx2ColumnIDs map[int64][]int64 | ||
winoros marked this conversation as resolved.
Show resolved
Hide resolved
|
||
// ColID2IdxIDs maps the column id to a list index ids whose first column is it. It's used to calculate the selectivity in planner. | ||
// ColID2IdxIDs maps the column UniqueID to a list index ids whose first column is it. | ||
// It's used to calculate the selectivity in planner. | ||
ColID2IdxIDs map[int64][]int64 | ||
// UniqueID2colInfoID maps the column UniqueID to its ID in the metadata. | ||
UniqueID2colInfoID map[int64]int64 | ||
// MVIdx2Columns maps the index id to its columns by expression.Column. | ||
// For normal index, the column id is enough, as we already have in Idx2ColumnIDs. But currently, mv index needs more | ||
// information to match the filter against the mv index columns, and we need this map to provide this information. | ||
|
@@ -804,9 +808,11 @@ func (coll *HistColl) ID2UniqueID(columns []*expression.Column) *HistColl { | |
func (coll *HistColl) GenerateHistCollFromColumnInfo(tblInfo *model.TableInfo, columns []*expression.Column) *HistColl { | ||
newColHistMap := make(map[int64]*Column) | ||
colInfoID2UniqueID := make(map[int64]int64, len(columns)) | ||
uniqueID2colInfoID := make(map[int64]int64, len(columns)) | ||
idxID2idxInfo := make(map[int64]*model.IndexInfo) | ||
for _, col := range columns { | ||
colInfoID2UniqueID[col.ID] = col.UniqueID | ||
uniqueID2colInfoID[col.UniqueID] = col.ID | ||
} | ||
for id, colHist := range coll.Columns { | ||
uniqueID, ok := colInfoID2UniqueID[id] | ||
|
@@ -853,16 +859,17 @@ func (coll *HistColl) GenerateHistCollFromColumnInfo(tblInfo *model.TableInfo, c | |
slices.Sort(idxIDs) | ||
} | ||
newColl := &HistColl{ | ||
PhysicalID: coll.PhysicalID, | ||
HavePhysicalID: coll.HavePhysicalID, | ||
Pseudo: coll.Pseudo, | ||
RealtimeCount: coll.RealtimeCount, | ||
ModifyCount: coll.ModifyCount, | ||
Columns: newColHistMap, | ||
Indices: newIdxHistMap, | ||
ColID2IdxIDs: colID2IdxIDs, | ||
Idx2ColumnIDs: idx2Columns, | ||
MVIdx2Columns: mvIdx2Columns, | ||
PhysicalID: coll.PhysicalID, | ||
HavePhysicalID: coll.HavePhysicalID, | ||
Pseudo: coll.Pseudo, | ||
RealtimeCount: coll.RealtimeCount, | ||
ModifyCount: coll.ModifyCount, | ||
Columns: newColHistMap, | ||
Indices: newIdxHistMap, | ||
ColID2IdxIDs: colID2IdxIDs, | ||
Idx2ColumnIDs: idx2Columns, | ||
UniqueID2colInfoID: uniqueID2colInfoID, | ||
MVIdx2Columns: mvIdx2Columns, | ||
} | ||
return newColl | ||
} | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Same as above