From 59dce259b34b595630b378590c7397f12d00ce47 Mon Sep 17 00:00:00 2001 From: link2xt Date: Sat, 1 Mar 2025 16:10:54 +0000 Subject: [PATCH] use unlikely() hint instead of forcing an index --- src/message.rs | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/src/message.rs b/src/message.rs index d08fbe13a..15dbb7efb 100644 --- a/src/message.rs +++ b/src/message.rs @@ -1313,11 +1313,13 @@ impl Message { /// UI can use this to show a symbol beside the message, indicating it was saved. /// The message can be un-saved by deleting the returned message. pub async fn get_saved_msg_id(&self, context: &Context) -> Result> { - // We force usage of `msgs_index5` here - // which indexes `msgs.starred` column. + // We force usage of `msgs_index5` + // which indexes `msgs.starred` column + // using `unlikely()` here. // // Otherwise with SQLite 3.49.1 - // if you run ANALYZE on the database, + // if you run ANALYZE on the database + // that has no starred messages, // query planner decides not to use the index: // // sqlite> EXPLAIN QUERY PLAN SELECT id FROM msgs WHERE starred=? AND chat_id!=?; @@ -1335,13 +1337,13 @@ impl Message { // as of 2025-02-28, ANALYZE is supposed to improve performance // and this demonstrates a bug in the query planner. // - // Note that usage of INDEXED BY is generally discouraged, - // see - // and . + // See + // and + // for details. let res: Option = context .sql .query_get_value( - "SELECT id FROM msgs INDEXED BY msgs_index5 WHERE starred=? AND chat_id!=?", + "SELECT id FROM msgs WHERE unlikely(starred=?) AND chat_id!=?", (self.id, DC_CHAT_ID_TRASH), ) .await?;