From 325cddb3ec987c1a8f751cde9a8c60ce31c64460 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 a9b5e792b2af3d..c16a7d12c8d9c7 100644 --- a/be/src/olap/rowset/segment_v2/segment_iterator.cpp +++ b/be/src/olap/rowset/segment_v2/segment_iterator.cpp @@ -504,7 +504,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 4603cf584a4ce5..1b01fd10d5da74 100644 --- a/be/src/olap/rowset/segment_v2/segment_iterator.h +++ b/be/src/olap/rowset/segment_v2/segment_iterator.h @@ -157,6 +157,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);