[P1/优化] messages 表缺少 (session_id, timestamp) 复合索引,长会话加载慢 #42

Open
opened 2026-07-21 21:56:06 +08:00 by thzxx · 0 comments
Owner

问题类型

优化 / 高 / 后端服务

文件位置

electron/services/database.service.ts

问题描述

messages 表仅有 session_id 单字段索引。
SessionService.getMessages 执行:

SELECT * FROM messages WHERE session_id = ? ORDER BY timestamp ASC;

需要 filesort(虽然 SQLite 不叫 filesort 但概念类似)排序。
长会话(1000+ 消息)加载时:

  • 全部扫描后排序
  • 100ms+ 延迟
  • 频繁加载下 CPU 占用高

影响

  • 长会话切换慢
  • UI 卡顿

建议修复

CREATE INDEX IF NOT EXISTS idx_messages_session_timestamp
ON messages(session_id, timestamp ASC);

覆盖索引,避免回表与排序。

添加迁移:

{
  version: '0.x.x',
  sql: 'CREATE INDEX IF NOT EXISTS idx_messages_session_timestamp ON messages(session_id, timestamp ASC);',
}
## 问题类型 优化 / 高 / 后端服务 ## 文件位置 `electron/services/database.service.ts` ## 问题描述 messages 表仅有 `session_id` 单字段索引。 SessionService.getMessages 执行: ```sql SELECT * FROM messages WHERE session_id = ? ORDER BY timestamp ASC; ``` 需要 filesort(虽然 SQLite 不叫 filesort 但概念类似)排序。 长会话(1000+ 消息)加载时: - 全部扫描后排序 - 100ms+ 延迟 - 频繁加载下 CPU 占用高 ## 影响 - 长会话切换慢 - UI 卡顿 ## 建议修复 ```sql CREATE INDEX IF NOT EXISTS idx_messages_session_timestamp ON messages(session_id, timestamp ASC); ``` 覆盖索引,避免回表与排序。 添加迁移: ```ts { version: '0.x.x', sql: 'CREATE INDEX IF NOT EXISTS idx_messages_session_timestamp ON messages(session_id, timestamp ASC);', } ```
thzxx added the ??????? labels 2026-07-21 21:56:06 +08:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: MetonaTeam/metona-ai-desktop#42