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

数据库CPU占用过高,请求优化指定SQL查询语句

SQL查询CPU占用过高的优化方案

一、先搞定索引(最关键的优化点)

  • 主表mnvb.hjvgf的过滤字段infgrdt必须建覆盖索引,把查询需要的字段都包含进去,避免回表查询:
    CREATE INDEX idx_hjvgf_infgrdt_cover ON mnvb.hjvgf (infgrdt) INCLUDE (hfg, dfg, hjr, efxd, gefvb);
    
  • 关联表的关联字段也要建带覆盖的索引,减少关联时的表扫描:
    CREATE INDEX idx_yefg_fgd_cover ON mnvb.yefg (fgd) INCLUDE (ufl);
    CREATE INDEX idx_fjtn_fgd_cover ON mnvb.fjtn (fgd) INCLUDE (jdnm);
    

二、查询语句微调

原查询逻辑没问题,但可以强制数据库先过滤主表再关联,避免优化器选错执行顺序(以MySQL为例,PostgreSQL可调整为LEADING(de)):

SELECT 
    de.infgrdt, 
    de.hfg, 
    de.dfg, 
    de.hjr, 
    e.ufl AS exchange, 
    de.efxd, 
    t.jdnm AS prkr 
FROM mnvb.hjvgf de
STRAIGHT_JOIN mnvb.yefg e ON de.efxd = e.fgd
STRAIGHT_JOIN mnvb.fjtn t ON de.gefvb = t.fgd
WHERE de.infgrdt >= '2022-10-14 00:04:20.000000' AND de.infgrdt < '2022-10-14 03:22:54.000000';

三、必做的检查项

  • 跑执行计划:用EXPLAIN(MySQL)或EXPLAIN ANALYZE(PostgreSQL)查看执行路径,确认索引是否生效,有没有全表扫描的环节。
  • 核对关联字段类型:确保de.efxd和e.fgd、de.gefvb和t.fgd的数据类型完全一致,类型不匹配会直接导致索引失效。
  • 评估数据量:如果这个时间范围内的行数特别多,考虑分页查询或者分批处理,别一次性拉取所有数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 20:35:37