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]

Reply via email to