From e6e30d531039e036ec7d10a214c41cc375ea1ca4 Mon Sep 17 00:00:00 2001 From: airborne12 Date: Tue, 8 Oct 2024 20:10:27 +0800 Subject: [PATCH] [Enhancement](inverted index) apply inverted index when has any (#41547) ## Proposed changes This PR optimizes the inverted index logic by skipping the execution of inverted index conditions when none are present. This change improves performance by avoiding unnecessary inverted index condition flow. --- be/src/olap/rowset/segment_v2/segment_iterator.cpp | 3 ++- be/src/olap/rowset/segment_v2/segment_iterator.h | 5 +++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/be/src/olap/rowset/segment_v2/segment_iterator.cpp b/be/src/olap/rowset/segment_v2/segment_iterator.cpp index dfed07277d8130..3d8e06bbc00589 100644 --- a/be/src/olap/rowset/segment_v2/segment_iterator.cpp +++ b/be/src/olap/rowset/segment_v2/segment_iterator.cpp @@ -505,7 +505,8 @@ Status SegmentIterator::_get_row_ranges_by_column_conditions() { RETURN_IF_ERROR(_apply_bitmap_index()); { if (_opts.runtime_state && - _opts.runtime_state->query_options().enable_inverted_index_query) { + _opts.runtime_state->query_options().enable_inverted_index_query && + has_inverted_index_in_iterators()) { SCOPED_RAW_TIMER(&_opts.stats->inverted_index_filter_timer); size_t input_rows = _row_bitmap.cardinality(); RETURN_IF_ERROR(_apply_inverted_index()); diff --git a/be/src/olap/rowset/segment_v2/segment_iterator.h b/be/src/olap/rowset/segment_v2/segment_iterator.h index 50876cd7c55fe8..c2e2139e8ad411 100644 --- a/be/src/olap/rowset/segment_v2/segment_iterator.h +++ b/be/src/olap/rowset/segment_v2/segment_iterator.h @@ -156,6 +156,11 @@ class SegmentIterator : public RowwiseIterator { return _inverted_index_iterators; } + bool has_inverted_index_in_iterators() const { + return std::any_of(_inverted_index_iterators.begin(), _inverted_index_iterators.end(), + [](const auto& iterator) { return iterator != nullptr; }); + } + private: Status _next_batch_internal(vectorized::Block* block);