diff --git a/statistics/cmsketch.go b/statistics/cmsketch.go index 3c6d9ee566717..f94d00ca08fa5 100644 --- a/statistics/cmsketch.go +++ b/statistics/cmsketch.go @@ -919,14 +919,13 @@ func checkEmptyTopNs(topNs []*TopN) bool { } // SortTopnMeta sort topnMeta -func SortTopnMeta(topnMetas []TopNMeta) []TopNMeta { +func SortTopnMeta(topnMetas []TopNMeta) { slices.SortFunc(topnMetas, func(i, j TopNMeta) int { if i.Count != j.Count { return cmp.Compare(j.Count, i.Count) } return bytes.Compare(i.Encoded, j.Encoded) }) - return topnMetas } // GetMergedTopNFromSortedSlice returns merged topn @@ -935,12 +934,7 @@ func GetMergedTopNFromSortedSlice(sorted []TopNMeta, n uint32) (*TopN, []TopNMet } func getMergedTopNFromSortedSlice(sorted []TopNMeta, n uint32) (*TopN, []TopNMeta) { - slices.SortFunc(sorted, func(i, j TopNMeta) int { - if i.Count != j.Count { - return cmp.Compare(j.Count, i.Count) - } - return bytes.Compare(i.Encoded, j.Encoded) - }) + SortTopnMeta(sorted) n = mathutil.Min(uint32(len(sorted)), n) var finalTopN TopN diff --git a/statistics/cmsketch_test.go b/statistics/cmsketch_test.go index e715235c193af..8d165b7b54d68 100644 --- a/statistics/cmsketch_test.go +++ b/statistics/cmsketch_test.go @@ -347,8 +347,8 @@ func TestSortTopnMeta(t *testing.T) { Encoded: []byte("b"), Count: 2, }} - sortedData := SortTopnMeta(data) - require.Equal(t, uint64(2), sortedData[0].Count) + SortTopnMeta(data) + require.Equal(t, uint64(2), data[0].Count) } func TestMergePartTopN2GlobalTopNWithHists(t *testing.T) { diff --git a/statistics/handle/handle.go b/statistics/handle/handle.go index a862b03d949b4..17402392fb548 100644 --- a/statistics/handle/handle.go +++ b/statistics/handle/handle.go @@ -970,7 +970,10 @@ func MergeGlobalStatsTopNByConcurrency(mergeConcurrency, mergeBatchSize int, wra } globalTopN, popedTopn := statistics.GetMergedTopNFromSortedSlice(sorted, n) - return globalTopN, statistics.SortTopnMeta(append(leftTopn, popedTopn...)), wrapper.AllHg, nil + + result := append(leftTopn, popedTopn...) + statistics.SortTopnMeta(result) + return globalTopN, result, wrapper.AllHg, nil } func (h *Handle) getTableByPhysicalID(is infoschema.InfoSchema, physicalID int64) (table.Table, bool) {