text_message 表(本地 121 万行)的 from_id 列为 longtext 且无索引,WHERE from_id = ? ORDER BY id DESC LIMIT n 触发全表扫描(EXPLAIN 显示走 PRIMARY + Using where)。节点详情页的 loadInitialMessages 依赖该查询,导致整页加载被拖慢。
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
问题
节点详情页(/detailed/:nodeId)长时间停留在"正在加载节点详情...":按
from_id查询聊天记录耗时约 10 秒(其余接口约 20ms)。根因
text_message表(本地 121 万行)的from_id列为 longtext 且无索引,WHERE from_id = ? ORDER BY id DESC LIMIT n触发全表扫描(EXPLAIN 显示走 PRIMARY + Using where)。节点详情页的loadInitialMessages依赖该查询,导致整页加载被拖慢。(
channel_id在 DBv1 中已做过同样的 TEXT→VARCHAR 处理,from_id漏掉了。)修复
TextMessageRecord.FromID增加type:varchar(191)与索引标签——新装库建表即为 varchar(191) +idx_text_message_from_id索引;migrateTextMessageFromIDIndex:from_id改为VARCHAR(191),再建完整索引(与 DBv1 的 channel_id 先例一致);验证
idx_text_message_from_id (from_id(191))(在线 DDL,无阻塞):/api/text-messages?from=!501492cf从 10.07s → 0.02s;ref走索引(4 行);go build ./...+go vet ./internal/store/通过。