From cc498572cd4f1bc991d313d860c6dfb86291cf48 Mon Sep 17 00:00:00 2001 From: JRoberts <8711996+jr-simplex@users.noreply.github.com> Date: Thu, 11 Aug 2022 15:48:47 +0400 Subject: [PATCH] core: create indices on chat_items for faster pagination (#927) --- simplex-chat.cabal | 1 + .../Chat/Migrations/M20220811_chat_items_indices.hs | 13 +++++++++++++ src/Simplex/Chat/Migrations/chat_schema.sql | 11 +++++++++++ src/Simplex/Chat/Store.hs | 4 +++- 4 files changed, 28 insertions(+), 1 deletion(-) create mode 100644 src/Simplex/Chat/Migrations/M20220811_chat_items_indices.hs diff --git a/simplex-chat.cabal b/simplex-chat.cabal index f88141d07c..d78d21f178 100644 --- a/simplex-chat.cabal +++ b/simplex-chat.cabal @@ -42,6 +42,7 @@ library Simplex.Chat.Migrations.M20220626_auto_reply Simplex.Chat.Migrations.M20220702_calls Simplex.Chat.Migrations.M20220715_groups_chat_item_id + Simplex.Chat.Migrations.M20220811_chat_items_indices Simplex.Chat.Mobile Simplex.Chat.Options Simplex.Chat.Protocol diff --git a/src/Simplex/Chat/Migrations/M20220811_chat_items_indices.hs b/src/Simplex/Chat/Migrations/M20220811_chat_items_indices.hs new file mode 100644 index 0000000000..a43617d439 --- /dev/null +++ b/src/Simplex/Chat/Migrations/M20220811_chat_items_indices.hs @@ -0,0 +1,13 @@ +{-# LANGUAGE QuasiQuotes #-} + +module Simplex.Chat.Migrations.M20220811_chat_items_indices where + +import Database.SQLite.Simple (Query) +import Database.SQLite.Simple.QQ (sql) + +m20220811_chat_items_indices :: Query +m20220811_chat_items_indices = + [sql| +CREATE INDEX idx_chat_items_groups ON chat_items(user_id, group_id, item_ts, chat_item_id); +CREATE INDEX idx_chat_items_contacts ON chat_items(user_id, contact_id, chat_item_id); +|] diff --git a/src/Simplex/Chat/Migrations/chat_schema.sql b/src/Simplex/Chat/Migrations/chat_schema.sql index 33b5441efa..8ef4889572 100644 --- a/src/Simplex/Chat/Migrations/chat_schema.sql +++ b/src/Simplex/Chat/Migrations/chat_schema.sql @@ -382,3 +382,14 @@ CREATE TABLE calls( created_at TEXT NOT NULL DEFAULT(datetime('now')), updated_at TEXT NOT NULL DEFAULT(datetime('now')) ); +CREATE INDEX idx_chat_items_groups ON chat_items( + user_id, + group_id, + item_ts, + chat_item_id +); +CREATE INDEX idx_chat_items_contacts ON chat_items( + user_id, + contact_id, + chat_item_id +); diff --git a/src/Simplex/Chat/Store.hs b/src/Simplex/Chat/Store.hs index 49a889d673..4ab6199026 100644 --- a/src/Simplex/Chat/Store.hs +++ b/src/Simplex/Chat/Store.hs @@ -221,6 +221,7 @@ import Simplex.Chat.Migrations.M20220514_profiles_user_id import Simplex.Chat.Migrations.M20220626_auto_reply import Simplex.Chat.Migrations.M20220702_calls import Simplex.Chat.Migrations.M20220715_groups_chat_item_id +import Simplex.Chat.Migrations.M20220811_chat_items_indices import Simplex.Chat.Protocol import Simplex.Chat.Types import Simplex.Messaging.Agent.Protocol (AgentMsgId, ConnId, InvitationId, MsgMeta (..)) @@ -248,7 +249,8 @@ schemaMigrations = ("20220514_profiles_user_id", m20220514_profiles_user_id), ("20220626_auto_reply", m20220626_auto_reply), ("20220702_calls", m20220702_calls), - ("20220715_groups_chat_item_id", m20220715_groups_chat_item_id) + ("20220715_groups_chat_item_id", m20220715_groups_chat_item_id), + ("20220811_chat_items_indices", m20220811_chat_items_indices) ] -- | The list of migrations in ascending order by date