This is an automated email from the ASF dual-hosted git repository.

pjfanning pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/pekko-persistence-jdbc.git


The following commit(s) were added to refs/heads/main by this push:
     new a1de7c8b add tag indexes (#593)
a1de7c8b is described below

commit a1de7c8b83ca878363b22b29211d564cf87b1360
Author: PJ Fanning <[email protected]>
AuthorDate: Fri Aug 21 23:23:34 2026 +0100

    add tag indexes (#593)
    
    * add tag indexes
    
    * add tag indexes
    
    * links
    
    * mysql test issues
---
 core/src/main/resources/schema/h2/h2-create-schema.sql     |  2 ++
 .../migration-2.0.0/oracle-event-tag-index-migration.sql   | 14 ++++++++++++++
 .../main/resources/schema/oracle/oracle-create-schema.sql  |  6 ++++++
 .../postgresql-event-tag-index-migration.sql               |  8 ++++++++
 .../resources/schema/postgres/postgres-create-schema.sql   |  2 ++
 .../sqlserver-event-tag-index-migration.sql                |  8 ++++++++
 .../resources/schema/sqlserver/sqlserver-create-schema.sql |  2 ++
 .../pekko/persistence/jdbc/state/DurableStateTables.scala  |  1 +
 8 files changed, 43 insertions(+)

diff --git a/core/src/main/resources/schema/h2/h2-create-schema.sql 
b/core/src/main/resources/schema/h2/h2-create-schema.sql
index de030c54..b6aa4f0e 100644
--- a/core/src/main/resources/schema/h2/h2-create-schema.sql
+++ b/core/src/main/resources/schema/h2/h2-create-schema.sql
@@ -29,6 +29,8 @@ CREATE TABLE IF NOT EXISTS PUBLIC."event_tag" (
       ON DELETE CASCADE
 );
 
+CREATE INDEX IF NOT EXISTS "event_tag_idx" on PUBLIC."event_tag" ("tag");
+
 CREATE TABLE IF NOT EXISTS PUBLIC."snapshot" (
     "persistence_id" VARCHAR(255) NOT NULL,
     "sequence_number" BIGINT NOT NULL,
diff --git 
a/core/src/main/resources/schema/oracle/migration-2.0.0/oracle-event-tag-index-migration.sql
 
b/core/src/main/resources/schema/oracle/migration-2.0.0/oracle-event-tag-index-migration.sql
new file mode 100644
index 00000000..8fca5a52
--- /dev/null
+++ 
b/core/src/main/resources/schema/oracle/migration-2.0.0/oracle-event-tag-index-migration.sql
@@ -0,0 +1,14 @@
+-- SPDX-License-Identifier: Apache-2.0
+
+-- see https://github.com/apache/pekko-persistence-jdbc/pull/593
+
+-- Add a tag-leading index on event_tag for efficient eventsByTag queries.
+-- The PK (persistence_id, sequence_number, tag) has tag as the third column,
+-- so it cannot be used efficiently for tag-first lookups.
+CREATE INDEX EVENT_TAG_IDX ON EVENT_TAG (TAG)
+/
+
+-- Add a global_offset index on durable_state for efficient changesByTag 
queries.
+-- This index was already in place for other databases, but was missing for 
Oracle.
+CREATE INDEX STATE_GLOBAL_OFFSET_IDX ON DURABLE_STATE (GLOBAL_OFFSET)
+/
diff --git a/core/src/main/resources/schema/oracle/oracle-create-schema.sql 
b/core/src/main/resources/schema/oracle/oracle-create-schema.sql
index f2951b07..4e215a5c 100644
--- a/core/src/main/resources/schema/oracle/oracle-create-schema.sql
+++ b/core/src/main/resources/schema/oracle/oracle-create-schema.sql
@@ -33,6 +33,9 @@ CREATE TABLE EVENT_TAG (
     )
 /
 
+CREATE INDEX EVENT_TAG_IDX ON EVENT_TAG (TAG)
+/
+
 CREATE TABLE SNAPSHOT (
     PERSISTENCE_ID VARCHAR(255) NOT NULL,
     SEQUENCE_NUMBER NUMERIC NOT NULL,
@@ -75,6 +78,9 @@ CREATE TABLE DURABLE_STATE
 )
 /
 
+CREATE INDEX STATE_GLOBAL_OFFSET_IDX ON DURABLE_STATE (GLOBAL_OFFSET)
+/
+
 CREATE OR REPLACE TRIGGER DURABLE_STATE__GLOBAL_OFFSET_SEQ_TRG
     before insert
     on DURABLE_STATE
diff --git 
a/core/src/main/resources/schema/postgres/migration-2.0.0/postgresql-event-tag-index-migration.sql
 
b/core/src/main/resources/schema/postgres/migration-2.0.0/postgresql-event-tag-index-migration.sql
new file mode 100644
index 00000000..19433b86
--- /dev/null
+++ 
b/core/src/main/resources/schema/postgres/migration-2.0.0/postgresql-event-tag-index-migration.sql
@@ -0,0 +1,8 @@
+-- SPDX-License-Identifier: Apache-2.0
+
+-- see https://github.com/apache/pekko-persistence-jdbc/pull/593
+
+-- Add a tag-leading index on event_tag for efficient eventsByTag queries.
+-- The PK (persistence_id, sequence_number, tag) has tag as the third column,
+-- so it cannot be used efficiently for tag-first lookups.
+CREATE INDEX CONCURRENTLY IF NOT EXISTS event_tag_idx on public.event_tag(tag);
diff --git a/core/src/main/resources/schema/postgres/postgres-create-schema.sql 
b/core/src/main/resources/schema/postgres/postgres-create-schema.sql
index 190dc966..53102fd1 100644
--- a/core/src/main/resources/schema/postgres/postgres-create-schema.sql
+++ b/core/src/main/resources/schema/postgres/postgres-create-schema.sql
@@ -33,6 +33,8 @@ CREATE TABLE IF NOT EXISTS public.event_tag(
       ON DELETE CASCADE
 );
 
+CREATE INDEX CONCURRENTLY event_tag_idx on public.event_tag(tag);
+
 CREATE TABLE IF NOT EXISTS public.snapshot (
   persistence_id VARCHAR(255) NOT NULL,
   sequence_number BIGINT NOT NULL,
diff --git 
a/core/src/main/resources/schema/sqlserver/migration-2.0.0/sqlserver-event-tag-index-migration.sql
 
b/core/src/main/resources/schema/sqlserver/migration-2.0.0/sqlserver-event-tag-index-migration.sql
new file mode 100644
index 00000000..5f203c6a
--- /dev/null
+++ 
b/core/src/main/resources/schema/sqlserver/migration-2.0.0/sqlserver-event-tag-index-migration.sql
@@ -0,0 +1,8 @@
+-- SPDX-License-Identifier: Apache-2.0
+
+-- see https://github.com/apache/pekko-persistence-jdbc/pull/593
+
+-- Add a tag-leading index on event_tag for efficient eventsByTag queries.
+-- The PK (persistence_id, sequence_number, tag) has tag as the third column,
+-- so it cannot be used efficiently for tag-first lookups.
+CREATE INDEX event_tag_idx on event_tag (tag);
diff --git 
a/core/src/main/resources/schema/sqlserver/sqlserver-create-schema.sql 
b/core/src/main/resources/schema/sqlserver/sqlserver-create-schema.sql
index 762b3bc4..9cfd96e4 100644
--- a/core/src/main/resources/schema/sqlserver/sqlserver-create-schema.sql
+++ b/core/src/main/resources/schema/sqlserver/sqlserver-create-schema.sql
@@ -30,6 +30,8 @@ CREATE TABLE event_tag
             on delete CASCADE
 );
 
+CREATE INDEX event_tag_idx on event_tag (tag);
+
 CREATE TABLE "snapshot" (
     "persistence_id" NVARCHAR(255) NOT NULL,
     "sequence_number" NUMERIC(10,0) NOT NULL,
diff --git 
a/core/src/main/scala/org/apache/pekko/persistence/jdbc/state/DurableStateTables.scala
 
b/core/src/main/scala/org/apache/pekko/persistence/jdbc/state/DurableStateTables.scala
index 32320d30..5cf58006 100644
--- 
a/core/src/main/scala/org/apache/pekko/persistence/jdbc/state/DurableStateTables.scala
+++ 
b/core/src/main/scala/org/apache/pekko/persistence/jdbc/state/DurableStateTables.scala
@@ -69,6 +69,7 @@ import 
pekko.persistence.jdbc.config.DurableStateTableConfiguration
     val stateTimestamp: Rep[Long] = 
column[Long](durableStateTableCfg.columnNames.stateTimestamp)
 
     val globalOffsetIdx = index(s"${tableName}_globalOffset_idx", 
globalOffset, unique = true)
+    val tagIdx = index(s"${tableName}_tag_idx", tag)
   }
   lazy val durableStateTable = new TableQuery(new DurableState(_))
 }


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to