You are viewing a plain text version of this content. The canonical link for it is here.
Posted to oak-commits@jackrabbit.apache.org by re...@apache.org on 2018/03/13 14:25:44 UTC

svn commit: r1826638 - /jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBDocumentStoreDB.java

Author: reschke
Date: Tue Mar 13 14:25:44 2018
New Revision: 1826638

URL: http://svn.apache.org/viewvc?rev=1826638&view=rev
Log:
OAK-7330: RDBDocumentStore: make indices on SD* sparse where possible

special-case DB2 and SQLServer (Oracle already creates sparse indices by default)

Modified:
    jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBDocumentStoreDB.java

Modified: jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBDocumentStoreDB.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBDocumentStoreDB.java?rev=1826638&r1=1826637&r2=1826638&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBDocumentStoreDB.java (original)
+++ jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBDocumentStoreDB.java Tue Mar 13 14:25:44 2018
@@ -389,6 +389,10 @@ public enum RDBDocumentStoreDB {
 
             return result;
         }
+
+        public String makeIndexConditionalForColumn(String columnName) {
+            return " exclude null keys";
+        }
     },
 
     ORACLE("Oracle") {
@@ -792,6 +796,10 @@ public enum RDBDocumentStoreDB {
 
             return result;
         }
+
+        public String makeIndexConditionalForColumn(String columnName) {
+            return " where " + columnName + " is not null";
+        }
     };
 
     private static final Logger LOG = LoggerFactory.getLogger(RDBDocumentStoreDB.class);
@@ -889,8 +897,10 @@ public enum RDBDocumentStoreDB {
         }
         if (level == 2) {
             result.add("create index " + tableName + "_VSN on " + tableName + " (VERSION)");
-            result.add("create index " + tableName + "_SDT on " + tableName + " (SDTYPE)");
-            result.add("create index " + tableName + "_SDM on " + tableName + " (SDMAXREVTIME)");
+            result.add(
+                    "create index " + tableName + "_SDT on " + tableName + " (SDTYPE)" + makeIndexConditionalForColumn("SDTYPE"));
+            result.add("create index " + tableName + "_SDM on " + tableName + " (SDMAXREVTIME)"
+                    + makeIndexConditionalForColumn("SDMAXREVTIME"));
         }
         return result;
     }
@@ -979,6 +989,10 @@ public enum RDBDocumentStoreDB {
         return "bigint";
     }
 
+    public String makeIndexConditionalForColumn(String columnName) {
+        return "";
+    }
+
     /**
      * Statements needed to upgrade the DB
      *
@@ -993,8 +1007,9 @@ public enum RDBDocumentStoreDB {
             String[] statements = new String[] { "alter table " + tableName + " add SDTYPE " + smallint,
                     "alter table " + tableName + " add SDMAXREVTIME " + bigint,
                     "create index " + tableName + "_VSN on " + tableName + " (VERSION)",
-                    "create index " + tableName + "_SDT on " + tableName + " (SDTYPE)",
-                    "create index " + tableName + "_SDM on " + tableName + " (SDMAXREVTIME)", };
+                    "create index " + tableName + "_SDT on " + tableName + " (SDTYPE)" + makeIndexConditionalForColumn("SDTYPE"),
+                    "create index " + tableName + "_SDM on " + tableName + " (SDMAXREVTIME)"
+                            + makeIndexConditionalForColumn("SDMAXREVTIME"), };
             return Arrays.asList(statements);
         } else {
             throw new IllegalArgumentException("level must be 1 or 2");