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");


Reply via email to