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