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

MySQL大表INFO、HISTORY查询性能低下,如何重构表结构优化?

MySQL表性能优化方案

表结构与索引调整

INFO表(60万+记录)

  • 首先修正字段名问题:group、key都是MySQL保留关键字,每次查询都需要额外解析,建议修改为非保留字,比如group改为group_name,key改为biz_unique_key,避免语法风险和解析损耗。
  • 新增联合唯一索引:UNIQUE KEY idx_group_key (group, key),该索引可同时覆盖三类高频操作:
    • SELECT COUNT(group) FROM INFO WHERE group = ? 直接走索引统计,无需回表,毫秒级返回结果
    • SELECT * FROM INFO WHERE group = ? and key = ? 全条件匹配索引,无需全表扫描
    • 自动约束group+key的唯一性,避免重复数据插入

HISTORY表(500万+记录)

  • 修正字段名问题:index是MySQL保留关键字,建议修改为history_id之类的非保留字。
  • 新增联合唯一索引:UNIQUE KEY idx_prod_info (product_name, info_id),完全匹配高频查询SELECT * FROM HISTORY WHERE product_name = ? and info_id = ?的过滤条件,查询直接走索引,避免500万级全表扫描。

业务逻辑优化

原有先查询再判断插入的逻辑可以直接替换为INSERT IGNORE语句,省去一次查询请求,数据库交互量直接减半:

  1. INFO表插入逻辑替换为:
INSERT IGNORE INTO INFO (`group`, `key`) VALUES ("GrB", "EEE")

根据返回的影响行数判断:返回1为插入成功(原无对应记录),返回0为记录已存在,无需额外执行SELECT查询。
2. HISTORY表插入逻辑替换为:

INSERT IGNORE INTO HISTORY (product_name, `group`, info_id) VALUES ("ProductA", "GrC", "4")

判断逻辑同上。

优化效果

所有高频查询均走覆盖索引,单条查询耗时可从5秒降至10ms以内,同时减少一半的数据库请求,整体性能提升至少两个数量级。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 13:45:01