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

如何优化执行过慢导致页面返回504错误的SQL查询

SQL查询优化方案

1. 移除冗余子查询

原写法里的三层嵌套子查询无实际意义,MySQL优化器处理这类无聚合、无去重的子查询时大概率会生成临时表,额外消耗内存和IO,直接改成关联表查询即可。

2. 避免SELECT *通配符

只查询业务需要的字段,减少数据扫描和网络传输开销,原写法里单独给schedules.id起别名ids,如果其他重复字段不需要可以直接明确指定字段列表。

3. 新增关联&过滤条件索引

给所有关联字段、WHERE过滤字段加联合索引,直接命中索引避免全表扫描:

  • schedules表加联合索引:INDEX idx_sch_person_object_category(person_id, object_id, category)
  • dacva表加主键/唯一索引(如果id已经是主键可跳过):PRIMARY KEY(id)
  • obieqti表加联合索引:INDEX idx_ob_active_id(active, id),覆盖过滤条件和关联字段
  • object_guard表加联合索引:INDEX idx_og_date_object_category(date_ended, object_id, category),覆盖过滤和关联条件

4. 优化后SQL语句

SELECT 
    -- 替换为实际需要的字段,不要用*
    schedules.*,
    dacva.saxeli, dacva.gvari, dacva.pn,
    obieqti.dasaxeleba, obieqti.kodi,
    object_guard.xelfasi, object_guard.zeganakveturi, object_guard.premia,
    schedules.id AS ids
FROM schedules 
INNER JOIN dacva ON schedules.person_id = dacva.id 
INNER JOIN obieqti ON schedules.object_id = obieqti.id AND obieqti.active = 1
INNER JOIN object_guard ON schedules.object_id = object_guard.object_id 
    AND schedules.category = object_guard.category 
    AND object_guard.date_ended < '$date_start'

5. 额外优化建议

如果调整后数据量还是太大导致超时,可新增分页逻辑,每次查固定条数的数据返回,避免一次性加载全量数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 21:45:06