diff --git a/web/api/v1/api.go b/web/api/v1/api.go index 40fb68b162..9ceaa8c3f2 100644 --- a/web/api/v1/api.go +++ b/web/api/v1/api.go @@ -768,15 +768,21 @@ func (api *API) series(r *http.Request) (result apiFuncResult) { End: timestamp.FromTime(end), Func: "series", // There is no series function, this token is used for lookups that don't need samples. } + var set storage.SeriesSet - var sets []storage.SeriesSet - for _, mset := range matcherSets { - // We need to sort this select results to merge (deduplicate) the series sets later. - s := q.Select(true, hints, mset...) - sets = append(sets, s) + if len(matcherSets) > 1 { + var sets []storage.SeriesSet + for _, mset := range matcherSets { + // We need to sort this select results to merge (deduplicate) the series sets later. + s := q.Select(true, hints, mset...) + sets = append(sets, s) + } + set = storage.NewMergeSeriesSet(sets, storage.ChainedSeriesMerge) + } else { + // At this point at least one match exists. + set = q.Select(false, hints, matcherSets[0]...) } - set := storage.NewMergeSeriesSet(sets, storage.ChainedSeriesMerge) metrics := []labels.Labels{} for set.Next() { metrics = append(metrics, set.At().Labels())