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
----------------------------------------------------------------------