use combined index (state, hidden, chat_id) to speed up marknoticed_chat()

This commit is contained in:
B. Petersen
2020-10-10 00:32:45 +02:00
parent 2fe600f885
commit 4c8e6ef495
2 changed files with 9 additions and 7 deletions

View File

@@ -1745,11 +1745,12 @@ pub async fn get_chat_msgs(
}
pub async fn marknoticed_chat(context: &Context, chat_id: ChatId) -> Result<(), Error> {
// "WHERE" below uses the index `(state, hidden, chat_id)`, see get_fresh_msg_cnt() for reasoning
if !context
.sql
.exists(
"SELECT id FROM msgs WHERE chat_id=? AND state=?;",
paramsv![chat_id, MessageState::InFresh],
"SELECT id FROM msgs WHERE state=? AND hidden=0 AND chat_id=?;",
paramsv![MessageState::InFresh, chat_id],
)
.await?
{
@@ -1760,10 +1761,11 @@ pub async fn marknoticed_chat(context: &Context, chat_id: ChatId) -> Result<(),
.sql
.execute(
"UPDATE msgs
SET state=13
WHERE chat_id=?
AND state=10;",
paramsv![chat_id],
SET state=?
WHERE state=?
AND hidden=0
AND chat_id=?;",
paramsv![MessageState::InNoticed, MessageState::InFresh, chat_id],
)
.await?;