fix: 提交列表和删除提交的慢查询,素材上传、登出和几处前端加载问题
性能(6 万条提交、18 万条消息的测试库上测的) - 提交列表 join task_task 时用 +s.task_id,不再从任务表出发经 task_id 单列索引回表读 html/css/js 大行,改走 slim 覆盖索引:翻页 260-700ms → 4-18ms - 删除提交时先查出 id 再按等值删关联行:prompt_message.submission_id 几乎全是 NULL, 写成 IN (子查询) 时统计信息会让 SQLite 扫整张表 bug - 提交列表排序加 rowid 作次级键,同分的提交翻页不再重复或遗漏 - 素材文件名只允许字母数字和 - _ .(否则 422),覆盖同名文件改成写临时文件再 rename; 前端删除时对名字做 URL 编码 - 刷新 token 只是网络失败时不再强制登出;退出请求失败时界面也显示为已退出 - 历史面板加载中收到的刷新不再丢掉;成绩册只用最后一次请求的结果,打开时不再加载两次 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
40f3063b91
commit
03878f6cc2
8 files changed
+124
-41
No files matched your search
@@ -1,13 +1,17 @@
|
||||
import { run } from "../db"
|
||||
import { all, run } from "../db"
|
||||
|
||||
// Django 的 on_delete=CASCADE 是在应用层做的,这里手动按依赖顺序删除。
|
||||
// 调用方负责包在事务里。
|
||||
|
||||
export function deleteSubmissions(where: string, params: Record<string, unknown>) {
|
||||
const ids = `SELECT id FROM submission_submission WHERE ${where}`
|
||||
run(`DELETE FROM submission_rating WHERE submission_id IN (${ids})`, params)
|
||||
run(`DELETE FROM submission_submissionaward WHERE submission_id IN (${ids})`, params)
|
||||
run(`DELETE FROM prompt_message WHERE submission_id IN (${ids})`, params)
|
||||
// 先查出 id 再逐个按等值删:prompt_message.submission_id 绝大多数是 NULL,
|
||||
// 统计信息会让 SQLite 觉得这个索引没用,写成 IN (子查询) 时它会扫整张大表(几百毫秒)
|
||||
const ids = all<{ id: string }>(`SELECT id FROM submission_submission WHERE ${where}`, params)
|
||||
for (const { id } of ids) {
|
||||
run(`DELETE FROM submission_rating WHERE submission_id = $id`, { id })
|
||||
run(`DELETE FROM submission_submissionaward WHERE submission_id = $id`, { id })
|
||||
run(`DELETE FROM prompt_message WHERE submission_id = $id`, { id })
|
||||
}
|
||||
run(`DELETE FROM submission_submission WHERE ${where}`, params)
|
||||
}
|
||||
|
||||
|
||||
Reference in new issue
Block a user