From 45d49df89be170ee772d43caf649b2ed6c156e4d Mon Sep 17 00:00:00 2001 From: congqixia Date: Mon, 20 Jan 2025 18:13:15 +0800 Subject: [PATCH] fix: Skip load extra indexes for sorted segment pk field (#39389) Related to #39339 Extra indexes can be ignored for most cases since sorted pk column already provided indexing features --------- Signed-off-by: Congqi Xia --- internal/core/src/segcore/ChunkedSegmentSealedImpl.cpp | 7 +++++++ internal/core/src/segcore/SegmentSealedImpl.cpp | 7 +++++++ 2 files changed, 14 insertions(+) diff --git a/internal/core/src/segcore/ChunkedSegmentSealedImpl.cpp b/internal/core/src/segcore/ChunkedSegmentSealedImpl.cpp index 20f8f8860a..821cacecbf 100644 --- a/internal/core/src/segcore/ChunkedSegmentSealedImpl.cpp +++ b/internal/core/src/segcore/ChunkedSegmentSealedImpl.cpp @@ -167,6 +167,13 @@ ChunkedSegmentSealedImpl::LoadScalarIndex(const LoadIndexInfo& info) { auto field_id = FieldId(info.field_id); auto& field_meta = schema_->operator[](field_id); + // if segment is pk sorted, user created indexes bring no performance gain but extra memory usage + if (is_sorted_by_pk_ && field_id == schema_->get_primary_field_id()) { + LOG_INFO( + "segment pk sorted, skip user index loading for primary key field"); + return; + } + auto row_count = info.index->Count(); AssertInfo(row_count > 0, "Index count is 0"); diff --git a/internal/core/src/segcore/SegmentSealedImpl.cpp b/internal/core/src/segcore/SegmentSealedImpl.cpp index d5edeb23c6..5e015a3781 100644 --- a/internal/core/src/segcore/SegmentSealedImpl.cpp +++ b/internal/core/src/segcore/SegmentSealedImpl.cpp @@ -204,6 +204,13 @@ SegmentSealedImpl::LoadScalarIndex(const LoadIndexInfo& info) { auto field_id = FieldId(info.field_id); auto& field_meta = schema_->operator[](field_id); + // if segment is pk sorted, user created indexes bring no performance gain but extra memory usage + if (is_sorted_by_pk_ && field_id == schema_->get_primary_field_id()) { + LOG_INFO( + "segment pk sorted, skip user index loading for primary key field"); + return; + } + auto row_count = info.index->Count(); AssertInfo(row_count > 0, "Index count is 0");