From 8211ce7ae3a2beeb7cc1789cfe2e0784d390fae9 Mon Sep 17 00:00:00 2001 From: akwizgran <akwizgran@users.sourceforge.net> Date: Thu, 21 Sep 2017 11:05:16 +0100 Subject: [PATCH] Add some simple indexes to the DB. --- .../briarproject/bramble/db/JdbcDatabase.java | 44 ++++++++++++++++++- 1 file changed, 43 insertions(+), 1 deletion(-) diff --git a/bramble-core/src/main/java/org/briarproject/bramble/db/JdbcDatabase.java b/bramble-core/src/main/java/org/briarproject/bramble/db/JdbcDatabase.java index 7ae01fe47a..48afdb38a5 100644 --- a/bramble-core/src/main/java/org/briarproject/bramble/db/JdbcDatabase.java +++ b/bramble-core/src/main/java/org/briarproject/bramble/db/JdbcDatabase.java @@ -232,6 +232,30 @@ abstract class JdbcDatabase implements Database<Connection> { + " REFERENCES transports (transportId)" + " ON DELETE CASCADE)"; + private static final String INDEX_CONTACTS_BY_AUTHOR_ID = + "CREATE INDEX IF NOT EXISTS contactsByAuthorId" + + " ON contacts (authorId)"; + + private static final String INDEX_MESSAGES_BY_GROUP_ID = + "CREATE INDEX IF NOT EXISTS messagesByGroupId" + + " ON messages (groupId)"; + + private static final String INDEX_OFFERS_BY_CONTACT_ID = + "CREATE INDEX IF NOT EXISTS offersByContactId" + + " ON offers (contactId)"; + + private static final String INDEX_GROUPS_BY_CLIENT_ID = + "CREATE INDEX IF NOT EXISTS groupsByClientId" + + " ON groups (clientId)"; + + private static final String INDEX_MESSAGE_METADATA_BY_MESSAGE_ID = + "CREATE INDEX IF NOT EXISTS messageMetadataByMessageId" + + " ON messageMetadata (messageId)"; + + private static final String INDEX_GROUP_METADATA_BY_GROUP_ID = + "CREATE INDEX IF NOT EXISTS groupMetadataByGroupId" + + " ON groupMetadata (groupId)"; + private static final Logger LOG = Logger.getLogger(JdbcDatabase.class.getName()); @@ -267,7 +291,7 @@ abstract class JdbcDatabase implements Database<Connection> { } catch (ClassNotFoundException e) { throw new DbException(e); } - // Open the database and create the tables if necessary + // Open the database and create the tables and indexes if necessary Connection txn = startTransaction(); try { if (reopen) { @@ -276,6 +300,7 @@ abstract class JdbcDatabase implements Database<Connection> { createTables(txn); storeSchemaVersion(txn); } + createIndexes(txn); commitTransaction(txn); } catch (DbException e) { abortTransaction(txn); @@ -340,6 +365,23 @@ abstract class JdbcDatabase implements Database<Connection> { } } + private void createIndexes(Connection txn) throws DbException { + Statement s = null; + try { + s = txn.createStatement(); + s.executeUpdate(INDEX_CONTACTS_BY_AUTHOR_ID); + s.executeUpdate(INDEX_MESSAGES_BY_GROUP_ID); + s.executeUpdate(INDEX_OFFERS_BY_CONTACT_ID); + s.executeUpdate(INDEX_GROUPS_BY_CLIENT_ID); + s.executeUpdate(INDEX_MESSAGE_METADATA_BY_MESSAGE_ID); + s.executeUpdate(INDEX_GROUP_METADATA_BY_GROUP_ID); + s.close(); + } catch (SQLException e) { + tryToClose(s); + throw new DbException(e); + } + } + private String insertTypeNames(String s) { s = s.replaceAll("HASH", hashType); s = s.replaceAll("BINARY", binaryType); -- GitLab