From 4a5dd0a3a40fbefd6e1e010e486d49cb4887f26e Mon Sep 17 00:00:00 2001 From: spaced4ndy <8711996+spaced4ndy@users.noreply.github.com> Date: Wed, 16 Aug 2023 10:41:52 +0400 Subject: [PATCH] core: add indexes to improve slow queries performance (#2931) * core: add indexes to improve slow queries performance * idx_chat_items_group_id * update simplexmq, schema * update simplexmq * remove index * update simplexmq --------- Co-authored-by: Evgeny Poberezkin <2769109+epoberezkin@users.noreply.github.com> --- cabal.project | 2 +- scripts/nix/sha256map.nix | 2 +- simplex-chat.cabal | 1 + .../Chat/Migrations/M20230814_indexes.hs | 18 ++++++++++++++++++ src/Simplex/Chat/Migrations/chat_schema.sql | 4 ++++ src/Simplex/Chat/Store/Migrations.hs | 4 +++- stack.yaml | 2 +- tests/Test.hs | 2 +- 8 files changed, 30 insertions(+), 5 deletions(-) create mode 100644 src/Simplex/Chat/Migrations/M20230814_indexes.hs diff --git a/cabal.project b/cabal.project index 4eb8bea101..0b27046572 100644 --- a/cabal.project +++ b/cabal.project @@ -7,7 +7,7 @@ constraints: zip +disable-bzip2 +disable-zstd source-repository-package type: git location: https://github.com/simplex-chat/simplexmq.git - tag: e2065ab3525ca67e39700ee8040839d667f75ea2 + tag: e586bef57a1391d8bdedc2afa645926931549e16 source-repository-package type: git diff --git a/scripts/nix/sha256map.nix b/scripts/nix/sha256map.nix index eb51dc5e12..c2530c26c1 100644 --- a/scripts/nix/sha256map.nix +++ b/scripts/nix/sha256map.nix @@ -1,5 +1,5 @@ { - "https://github.com/simplex-chat/simplexmq.git"."e2065ab3525ca67e39700ee8040839d667f75ea2" = "13rz58bdpkhfrp1d58ylpbazhzs26q5fjg0sclxgvdqnnmac5cgz"; + "https://github.com/simplex-chat/simplexmq.git"."e586bef57a1391d8bdedc2afa645926931549e16" = "00804ck1xka37j5gwaiyd3a8vflv8z1hmip1wyynkvr7naxblvzh"; "https://github.com/simplex-chat/hs-socks.git"."a30cc7a79a08d8108316094f8f2f82a0c5e1ac51" = "0yasvnr7g91k76mjkamvzab2kvlb1g5pspjyjn2fr6v83swjhj38"; "https://github.com/kazu-yamamoto/http2.git"."b5a1b7200cf5bc7044af34ba325284271f6dff25" = "0dqb50j57an64nf4qcf5vcz4xkd1vzvghvf8bk529c1k30r9nfzb"; "https://github.com/simplex-chat/direct-sqlcipher.git"."34309410eb2069b029b8fc1872deb1e0db123294" = "0kwkmhyfsn2lixdlgl15smgr1h5gjk7fky6abzh8rng2h5ymnffd"; diff --git a/simplex-chat.cabal b/simplex-chat.cabal index d52e8014c0..ea1bc2e71c 100644 --- a/simplex-chat.cabal +++ b/simplex-chat.cabal @@ -107,6 +107,7 @@ library Simplex.Chat.Migrations.M20230621_chat_item_moderations Simplex.Chat.Migrations.M20230705_delivery_receipts Simplex.Chat.Migrations.M20230721_group_snd_item_statuses + Simplex.Chat.Migrations.M20230814_indexes Simplex.Chat.Mobile Simplex.Chat.Mobile.WebRTC Simplex.Chat.Options diff --git a/src/Simplex/Chat/Migrations/M20230814_indexes.hs b/src/Simplex/Chat/Migrations/M20230814_indexes.hs new file mode 100644 index 0000000000..a7419037ef --- /dev/null +++ b/src/Simplex/Chat/Migrations/M20230814_indexes.hs @@ -0,0 +1,18 @@ +{-# LANGUAGE QuasiQuotes #-} + +module Simplex.Chat.Migrations.M20230814_indexes where + +import Database.SQLite.Simple (Query) +import Database.SQLite.Simple.QQ (sql) + +m20230814_indexes :: Query +m20230814_indexes = + [sql| +CREATE INDEX idx_chat_items_user_id_item_status ON chat_items(user_id, item_status); +|] + +down_m20230814_indexes :: Query +down_m20230814_indexes = + [sql| +DROP INDEX idx_chat_items_user_id_item_status; +|] diff --git a/src/Simplex/Chat/Migrations/chat_schema.sql b/src/Simplex/Chat/Migrations/chat_schema.sql index f925726436..76b7ba4a12 100644 --- a/src/Simplex/Chat/Migrations/chat_schema.sql +++ b/src/Simplex/Chat/Migrations/chat_schema.sql @@ -701,3 +701,7 @@ CREATE INDEX idx_group_snd_item_statuses_chat_item_id ON group_snd_item_statuses CREATE INDEX idx_group_snd_item_statuses_group_member_id ON group_snd_item_statuses( group_member_id ); +CREATE INDEX idx_chat_items_user_id_item_status ON chat_items( + user_id, + item_status +); diff --git a/src/Simplex/Chat/Store/Migrations.hs b/src/Simplex/Chat/Store/Migrations.hs index 972f0718eb..6da0d1cdcd 100644 --- a/src/Simplex/Chat/Store/Migrations.hs +++ b/src/Simplex/Chat/Store/Migrations.hs @@ -75,6 +75,7 @@ import Simplex.Chat.Migrations.M20230618_favorite_chats import Simplex.Chat.Migrations.M20230621_chat_item_moderations import Simplex.Chat.Migrations.M20230705_delivery_receipts import Simplex.Chat.Migrations.M20230721_group_snd_item_statuses +import Simplex.Chat.Migrations.M20230814_indexes import Simplex.Messaging.Agent.Store.SQLite.Migrations (Migration (..)) schemaMigrations :: [(String, Query, Maybe Query)] @@ -149,7 +150,8 @@ schemaMigrations = ("20230618_favorite_chats", m20230618_favorite_chats, Just down_m20230618_favorite_chats), ("20230621_chat_item_moderations", m20230621_chat_item_moderations, Just down_m20230621_chat_item_moderations), ("20230705_delivery_receipts", m20230705_delivery_receipts, Just down_m20230705_delivery_receipts), - ("20230721_group_snd_item_statuses", m20230721_group_snd_item_statuses, Just down_m20230721_group_snd_item_statuses) + ("20230721_group_snd_item_statuses", m20230721_group_snd_item_statuses, Just down_m20230721_group_snd_item_statuses), + ("20230814_indexes", m20230814_indexes, Just down_m20230814_indexes) ] -- | The list of migrations in ascending order by date diff --git a/stack.yaml b/stack.yaml index a39c671554..30dedb1b45 100644 --- a/stack.yaml +++ b/stack.yaml @@ -49,7 +49,7 @@ extra-deps: # - simplexmq-1.0.0@sha256:34b2004728ae396e3ae449cd090ba7410781e2b3cefc59259915f4ca5daa9ea8,8561 # - ../simplexmq - github: simplex-chat/simplexmq - commit: e2065ab3525ca67e39700ee8040839d667f75ea2 + commit: e586bef57a1391d8bdedc2afa645926931549e16 - github: kazu-yamamoto/http2 commit: b5a1b7200cf5bc7044af34ba325284271f6dff25 # - ../direct-sqlcipher diff --git a/tests/Test.hs b/tests/Test.hs index d9d36d472b..455d5459c7 100644 --- a/tests/Test.hs +++ b/tests/Test.hs @@ -18,11 +18,11 @@ main :: IO () main = do setLogLevel LogError -- LogDebug withGlobalLogging logCfg . hspec $ do + describe "Schema dump" schemaDumpTest describe "SimpleX chat markdown" markdownTests describe "SimpleX chat view" viewTests describe "SimpleX chat protocol" protocolTests describe "WebRTC encryption" webRTCTests - describe "Schema dump" schemaDumpTest around testBracket $ do describe "Mobile API Tests" mobileTests describe "SimpleX chat client" chatTests