You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何调整数据库表结构以提升问答站点SQL查询速度?

问答站点查询性能优化方案

一、表结构调整方案

  • 新增冗余预统计字段,避免实时聚合查询

    给question表新增like_count、dislike_count两个INT类型字段,默认值为0。每次用户提交/取消投票时,原子更新对应字段的数值,无需每次展示问题时实时统计vote表数据,直接消除一次聚合查询开销。
  • 优化vote表结构适配后续回答模块

    给vote表新增tinyint类型的target_type字段(1代表问题投票,2代表回答投票),将原question_id字段改为target_id,后续回答投票无需额外新建投票表,共用同一套投票逻辑。同时给vote表新增联合索引(target_type, target_id, user_id),大幅提升单用户投票状态校验、单内容投票统计的查询速度。
  • 回答表参考相同设计逻辑

    后续新增的answer表同样预置like_count、dislike_count冗余字段,配套user_id外键索引,沿用上述投票逻辑。

二、查询逻辑优化(进一步降低查询次数)

原来的4次单表查询可合并为1次联表查询,示例SQL如下:

SELECT 
    q.id, q.title, q.date, q.user_id, q.like_count, q.dislike_count,
    u.username,
    v.type AS current_user_vote_type -- 为空则代表当前用户未投票
FROM question q
LEFT JOIN `user` u ON q.user_id = u.id
LEFT JOIN vote v ON v.target_id = q.id AND v.target_type = 1 AND v.user_id = ? -- 代入当前登录用户ID
WHERE q.id = ? -- 代入目标问题ID

后续查询回答列表时,同理可通过一次联表查询拉取所有回答的内容、答主信息、投票数据、当前用户投票状态,无需逐行发起独立查询。

三、一致性保障建议

投票操作需用事务包裹:写入vote表记录和更新对应内容的冗余计数字段放在同一事务中执行,避免出现数据不一致问题。

内容的提问来源于stack exchange,提问作者Jess

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 01:15:04