This is an automated email from the ASF dual-hosted git repository.
maxyang pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/cloudberry.git
The following commit(s) were added to refs/heads/main by this push:
new 103da7ad86e ORCA: Optimize CDatumSortedSet by checking IsSorted before
sorting
103da7ad86e is described below
commit 103da7ad86e846cd241ac89e5085a55b9fa37d7e
Author: Jianghua Yang <[email protected]>
AuthorDate: Sat Jan 24 04:44:25 2026 +0800
ORCA: Optimize CDatumSortedSet by checking IsSorted before sorting
Check IsSorted before Sort to reduce O(n log n) to O(n-1) comparisons
for pre-sorted
IN lists, improving ORCA optimization time.
---
src/backend/gporca/libgpopt/src/base/CDatumSortedSet.cpp | 8 +++++++-
1 file changed, 7 insertions(+), 1 deletion(-)
diff --git a/src/backend/gporca/libgpopt/src/base/CDatumSortedSet.cpp
b/src/backend/gporca/libgpopt/src/base/CDatumSortedSet.cpp
index 7b141e767bc..0fe4481953d 100644
--- a/src/backend/gporca/libgpopt/src/base/CDatumSortedSet.cpp
+++ b/src/backend/gporca/libgpopt/src/base/CDatumSortedSet.cpp
@@ -42,7 +42,13 @@ CDatumSortedSet::CDatumSortedSet(CMemoryPool *mp,
CExpression *pexprArray,
{
return;
}
- aprngdatum->Sort(&CUtils::IDatumCmp);
+ // Only sort if not already sorted - IsSorted is O(n-1) comparisons,
+ // while Sort is O(n log n), so this optimization helps when data
+ // is already sorted (common case for IN lists in queries)
+ if (!aprngdatum->IsSorted(&CUtils::IDatumCmp))
+ {
+ aprngdatum->Sort(&CUtils::IDatumCmp);
+ }
// de-duplicate
const ULONG ulRangeArrayArity = aprngdatum->Size();
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]