You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@trafodion.apache.org by hz...@apache.org on 2015/12/02 00:56:39 UTC

[1/2] incubator-trafodion git commit: fix JIRA 1654 (rework)

Repository: incubator-trafodion
Updated Branches:
  refs/heads/master c6d0773cb -> 5316fee08


fix JIRA 1654 (rework)


Project: http://git-wip-us.apache.org/repos/asf/incubator-trafodion/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-trafodion/commit/c8d538da
Tree: http://git-wip-us.apache.org/repos/asf/incubator-trafodion/tree/c8d538da
Diff: http://git-wip-us.apache.org/repos/asf/incubator-trafodion/diff/c8d538da

Branch: refs/heads/master
Commit: c8d538da8d726d32700ef360451d46f2dd050b09
Parents: f8ff39c
Author: Qifan Chen <qf...@dev02.trafodion.org>
Authored: Tue Dec 1 17:25:31 2015 +0000
Committer: Qifan Chen <qf...@dev02.trafodion.org>
Committed: Tue Dec 1 17:25:31 2015 +0000

----------------------------------------------------------------------
 core/sql/optimizer/ColStatDesc.h     |  2 +-
 core/sql/optimizer/ScanOptimizer.cpp | 58 +++++++++++++++++++++++++------
 core/sql/sqlcomp/nadefaults.cpp      |  2 +-
 3 files changed, 49 insertions(+), 13 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/c8d538da/core/sql/optimizer/ColStatDesc.h
----------------------------------------------------------------------
diff --git a/core/sql/optimizer/ColStatDesc.h b/core/sql/optimizer/ColStatDesc.h
index 3ff5f96..4215cd9 100644
--- a/core/sql/optimizer/ColStatDesc.h
+++ b/core/sql/optimizer/ColStatDesc.h
@@ -93,7 +93,7 @@ public:
 // LCOV_EXCL_STOP
 
   // given a ValueIdSet of table columns, returns the stored groupUec (if
-  // it exists), else returns 0
+  // it exists), else returns csMinusOne
   CostScalar lookup (const ValueIdSet & key) const ;
 
   void initializeMCUecForUniqueIndxes(TableDesc &table,

http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/c8d538da/core/sql/optimizer/ScanOptimizer.cpp
----------------------------------------------------------------------
diff --git a/core/sql/optimizer/ScanOptimizer.cpp b/core/sql/optimizer/ScanOptimizer.cpp
index 6e60dc8..c4e6ccc 100644
--- a/core/sql/optimizer/ScanOptimizer.cpp
+++ b/core/sql/optimizer/ScanOptimizer.cpp
@@ -352,7 +352,10 @@ static NABoolean checkMDAMadditionalRestriction(
    NABoolean isLeadingDivisionColumn = FALSE;
    NABoolean isLeadingSaltColumn = FALSE;
 
-   CostScalar totalUecsForKeylessKeyColumns = 1;
+   CostScalar totalUecsForPredicatelessKeyColumns = 1;
+   CostScalar totalUecsForCurrentPredicatelessKeyColumnGroup = 1;
+
+   ValueIdSet currentPredicatelessKeyColumnGroup;
 
    for (index = 0; index < lastColumnPosition; index++)
    {
@@ -366,15 +369,15 @@ static NABoolean checkMDAMadditionalRestriction(
      isLeadingDivisionColumn = FALSE;
      isLeadingSaltColumn = FALSE;
 
+     ValueId columnVid = keyPredsByCol.getKeyColumnId(index);
+
      if ( checkLeadingDivColumns )
      {
        // Check if the key column is a leading divisioning column
-       isLeadingDivisionColumn = 
-            keyPredsByCol.getKeyColumnId(index).isDivisioningColumn();
+       isLeadingDivisionColumn = columnVid.isDivisioningColumn();
 
        // Check if the key column is a leading salted column
-       isLeadingSaltColumn =
-             keyPredsByCol.getKeyColumnId(index).isSaltColumn();
+       isLeadingSaltColumn = columnVid.isSaltColumn();
      }
 
      if (typeOfRange == KeyColumns::KeyColumn::EMPTY) {
@@ -387,28 +390,61 @@ static NABoolean checkMDAMadditionalRestriction(
            )
            noOfmissingKeyColumns++;
 
-        // accumulate the product of uecs for columns without predicates
-                   
-        totalUecsForKeylessKeyColumns *= hist.getColStatsForColumn(
-                   keyPredsByCol.getKeyColumnId(index)).getTotalUec().getCeiling();
+        // accumulate the product of uecs for columns without predicates in the current
+        // group
+        totalUecsForCurrentPredicatelessKeyColumnGroup *= hist.getColStatsForColumn(
+                   columnVid).getTotalUec().getCeiling();
 
+        // accumulate the column valud Id at the same time for MC UEC lookup later on.
+        currentPredicatelessKeyColumnGroup.insert(columnVid);
      } else {
 
         checkLeadingDivColumns = FALSE;
         presentKeyColumns++;
 
+        // If the set of key columns without predicate is not empty, fetch the MC UEC 
+        // for the entire set. If the MC UEC exists, replace the current accumualted
+        // total UEC with the MC UEC.
+        //
+        // We will set the set to empty so that the fetching MC UEC logic will not kick in 
+        // until a new key column without predicates is seen.
+        if ( currentPredicatelessKeyColumnGroup.entries() > 0 ) {
+
+           // fetch MC UEC from key coluymns for column set currentPredicatelessKeyColumnGroup 
+           const MultiColumnUecList* MCUL = hist.getColStatDescList().getUecList();
+
+           ValueIdSet theLargestSubset = 
+                   MCUL->largestSubset(currentPredicatelessKeyColumnGroup.convertToBaseIds());
+
+           if ( theLargestSubset.entries() > 1 &&
+                theLargestSubset.entries() == currentPredicatelessKeyColumnGroup.entries() ) 
+           {
+              CostScalar mcUEC = MCUL->lookup(theLargestSubset);
+
+              if ( mcUEC != csMinusOne )
+                 totalUecsForCurrentPredicatelessKeyColumnGroup = mcUEC;
+           }
+
+           currentPredicatelessKeyColumnGroup.clear();
+        }
+
+        totalUecsForPredicatelessKeyColumns *= 
+                totalUecsForCurrentPredicatelessKeyColumnGroup;
+
+        totalUecsForCurrentPredicatelessKeyColumnGroup = 1;
      }
    }     
+
    switch ( strategy ) {
      case MAJORITY_WITH_PREDICATES:
         return (presentKeyColumns > noOfmissingKeyColumns);
 
      case TOTAL_UECS:
-        return ( totalUecsForKeylessKeyColumns < totalUEC_threshold );
+        return ( totalUecsForPredicatelessKeyColumns < totalUEC_threshold );
 
      case BOTH:
         return ( presentKeyColumns > noOfmissingKeyColumns &&
-                 totalUecsForKeylessKeyColumns < totalUEC_threshold );
+                 totalUecsForPredicatelessKeyColumns < totalUEC_threshold );
 
      default:
        return FALSE;

http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/c8d538da/core/sql/sqlcomp/nadefaults.cpp
----------------------------------------------------------------------
diff --git a/core/sql/sqlcomp/nadefaults.cpp b/core/sql/sqlcomp/nadefaults.cpp
index e63b685..24b8681 100644
--- a/core/sql/sqlcomp/nadefaults.cpp
+++ b/core/sql/sqlcomp/nadefaults.cpp
@@ -2182,7 +2182,7 @@ SDDkwd__(ISO_MAPPING,           (char *)SQLCHARSETSTRING_ISO88591),
   DDflt0_(MDAM_SELECTION_DEFAULT,		"0.5"),
 
   DDflt0_(MDAM_TOTAL_UEC_CHECK_MIN_RC_THRESHOLD, "10000"),
-  DDflt0_(MDAM_TOTAL_UEC_CHECK_UEC_THRESHOLD,	 "0.01"),
+  DDflt0_(MDAM_TOTAL_UEC_CHECK_UEC_THRESHOLD,	 "0.2"),
 
   DDkwd__(MDAM_TRACING,			        "OFF"),
 


[2/2] incubator-trafodion git commit: Merge [TRAFODION-1654] PR-199 Rework for PR 195

Posted by hz...@apache.org.
Merge [TRAFODION-1654] PR-199 Rework for PR 195


Project: http://git-wip-us.apache.org/repos/asf/incubator-trafodion/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-trafodion/commit/5316fee0
Tree: http://git-wip-us.apache.org/repos/asf/incubator-trafodion/tree/5316fee0
Diff: http://git-wip-us.apache.org/repos/asf/incubator-trafodion/diff/5316fee0

Branch: refs/heads/master
Commit: 5316fee08b3484635603f7a737773f825860f025
Parents: c6d0773 c8d538d
Author: Hans Zeller <hz...@apache.org>
Authored: Tue Dec 1 23:55:22 2015 +0000
Committer: Hans Zeller <hz...@apache.org>
Committed: Tue Dec 1 23:55:22 2015 +0000

----------------------------------------------------------------------
 core/sql/optimizer/ColStatDesc.h     |  2 +-
 core/sql/optimizer/ScanOptimizer.cpp | 58 +++++++++++++++++++++++++------
 core/sql/sqlcomp/nadefaults.cpp      |  2 +-
 3 files changed, 49 insertions(+), 13 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/5316fee0/core/sql/optimizer/ScanOptimizer.cpp
----------------------------------------------------------------------