trafodion-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From dbirds...@apache.org
Subject [1/2] incubator-trafodion git commit: [TRAFODION-2765] Change heuristics so MDAM is considered more often
Date Mon, 16 Oct 2017 15:10:12 GMT
Repository: incubator-trafodion
Updated Branches:
  refs/heads/master f5fc8dca4 -> a7c9baeba


[TRAFODION-2765] Change heuristics so MDAM is considered more often


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

Branch: refs/heads/master
Commit: 3b71aeb6f26389f862536903ff4156d55fa3aca5
Parents: f9ba966
Author: Dave Birdsall <dbirdsall@apache.org>
Authored: Thu Oct 5 22:10:11 2017 +0000
Committer: Dave Birdsall <dbirdsall@apache.org>
Committed: Thu Oct 5 22:10:11 2017 +0000

----------------------------------------------------------------------
 core/sql/optimizer/ScanOptimizer.cpp | 42 +++++++++++++++++++++++++++++++
 core/sql/sqlcomp/DefaultConstants.h  |  2 ++
 core/sql/sqlcomp/nadefaults.cpp      |  4 +++
 3 files changed, 48 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/3b71aeb6/core/sql/optimizer/ScanOptimizer.cpp
----------------------------------------------------------------------
diff --git a/core/sql/optimizer/ScanOptimizer.cpp b/core/sql/optimizer/ScanOptimizer.cpp
index be30632..b753be6 100644
--- a/core/sql/optimizer/ScanOptimizer.cpp
+++ b/core/sql/optimizer/ScanOptimizer.cpp
@@ -3001,6 +3001,48 @@ ScanOptimizer::useSimpleFileScanOptimizer(const FileScan& associatedFileScan
                        ,indexDesc
                        );
 
+    if (CmpCommon::getDefault(MDAM_FSO_SIMPLE_RULE) == DF_ON)
+      {
+        // Quickly-computed special cases
+
+        if (searchKey.isUnique())
+          return TRUE;   // unique access, don't need to consider MDAM
+
+        if (exePreds.entries() == 0)  // if searchKey consumed all executor preds
+          return TRUE;   // then MDAM can't do better; don't consider
+
+        if (searchKey.getKeyPredicates().entries() == 0)
+          return FALSE;  // single subset is a full table scan, so try MDAM
+
+        // General case: If the search key prefix consumes all of
+        // the executor predicates, then we don't need to consider MDAM.
+        // But if there are predicates on key columns that SearchKey
+        // did not pick, then MDAM may have opportunities for reduced
+        // access, and so should be considered.
+
+        ValueIdSet baseColumns;
+        for (ValueId p = exePreds.init(); exePreds.next(p); exePreds.advance(p))
+          {
+            p.getItemExpr()->findAll(ITM_BASECOLUMN,baseColumns,TRUE,TRUE);
+          }
+
+        const ValueIdList & keyColumns = indexDesc->getIndexKey();
+        ValueId baseVid;
+        for (CollIndex i=0; i < keyColumns.entries(); i++ ) 
+          {
+            if (keyColumns[i].getItemExpr()->getOperatorType() == ITM_INDEXCOLUMN)
+              baseVid = ((IndexColumn*)(keyColumns[i].getItemExpr()))->getDefinition();
+            else
+              baseVid = keyColumns[i];
+
+            if (baseColumns.contains(baseVid))
+              return FALSE;  // key column occurs in exePreds; so consider MDAM
+          }
+
+        return TRUE;  // SearchKey already handles all key preds; don't consider MDAM 
+      }
+
+    // The (old) code below is executed only if CQD MDAM_FSO_SIMPLE_RULE is 'OFF'
     if ((! searchKey.isUnique()) &&
 	(searchKey.getKeyPredicates().entries() > 0))
     {

http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/3b71aeb6/core/sql/sqlcomp/DefaultConstants.h
----------------------------------------------------------------------
diff --git a/core/sql/sqlcomp/DefaultConstants.h b/core/sql/sqlcomp/DefaultConstants.h
index c6b74c9..9fb5d22 100644
--- a/core/sql/sqlcomp/DefaultConstants.h
+++ b/core/sql/sqlcomp/DefaultConstants.h
@@ -1659,6 +1659,8 @@ enum DefaultConstants
 
   MDAM_SUBSET_FACTOR,
 
+  MDAM_FSO_SIMPLE_RULE,
+
   // -------------------------------------------------------------------------
   // Makes NO ACTION referential action behave like RESTRICT.
   // -------------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/3b71aeb6/core/sql/sqlcomp/nadefaults.cpp
----------------------------------------------------------------------
diff --git a/core/sql/sqlcomp/nadefaults.cpp b/core/sql/sqlcomp/nadefaults.cpp
index 6e9a666..1f01e04 100644
--- a/core/sql/sqlcomp/nadefaults.cpp
+++ b/core/sql/sqlcomp/nadefaults.cpp
@@ -2196,6 +2196,10 @@ SDDkwd__(ISO_MAPPING,           (char *)SQLCHARSETSTRING_ISO88591),
   // of the key predicates)
   DDflt0_(MDAM_CPUCOST_NET_PER_PRED,		".5"),
 
+  // Added by JIRA TRAFODION-2765: Allows consideration of MDAM
+  // in more general circumstances.
+  XDDkwd__(MDAM_FSO_SIMPLE_RULE,		"ON"),
+
   // controls the max. number of seek positions under which MDAM will be
   // allowed. Set it to 0 turns off the feature.
   XDDui___(MDAM_NO_STATS_POSITIONS_THRESHOLD,       "10"),


Mime
View raw message