优化 / 高 / 后端服务
electron/services/database.service.ts
messages 表仅有 session_id 单字段索引。 SessionService.getMessages 执行:
session_id
SELECT * FROM messages WHERE session_id = ? ORDER BY timestamp ASC;
需要 filesort(虽然 SQLite 不叫 filesort 但概念类似)排序。 长会话(1000+ 消息)加载时:
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
结论: 工单描述的问题不存在(误报)。
idx_messages_session 已是 (session_id, created_at) 复合索引,完全覆盖 getMessages 的 WHERE session_id = ? ORDER BY created_at ASC 查询。工单描述"仅有 session_id 单字段索引"及"timestamp 列"均不准确(实际列名为 created_at)。
idx_messages_session
(session_id, created_at)
getMessages
WHERE session_id = ? ORDER BY created_at ASC
created_at
No dependencies set.
The note is not visible to the blocked user.
问题类型
优化 / 高 / 后端服务
文件位置
electron/services/database.service.ts问题描述
messages 表仅有
session_id单字段索引。SessionService.getMessages 执行:
需要 filesort(虽然 SQLite 不叫 filesort 但概念类似)排序。
长会话(1000+ 消息)加载时:
影响
建议修复
覆盖索引,避免回表与排序。
添加迁移:
修复说明
文件:
electron/services/database.service.ts结论: 工单描述的问题不存在(误报)。
idx_messages_session已是(session_id, created_at)复合索引,完全覆盖getMessages的WHERE session_id = ? ORDER BY created_at ASC查询。工单描述"仅有 session_id 单字段索引"及"timestamp 列"均不准确(实际列名为created_at)。