155
社区成员




有个存储过程里面就有一段简单SQL, CALL执行存储过程跑40分钟都没结束
但是把这段单独拉出来,放在gsql 20分钟就能执行完毕
目标就是CALL执行存储 也能在20分钟左右执行完毕,哪位大佬帮忙看看,实在是没有思路了,谢谢
insert into table_a
select col_1
col_2
,sum(col_3)
.... --有50多个SUM
,sum(col_50)
from table_pearson t1
left join table_xinzi t2
on t1.xxx=t2.xxxx
;
在这种情况下,存储过程执行时间长可能是由于存储过程内部的逻辑、索引、统计信息等因素导致的性能问题。以下是一些建议,希望能帮助您优化存储过程的执行时间:
分析执行计划:使用数据库工具(如 MySQL 的 Explain)来查看存储过程的执行计划,确认是否存在慢查询、索引未命中等问题。优化查询和表连接顺序可以提高查询性能。
索引优化:确保表中涉及到的列上都有合适的索引,特别是连接条件和用于聚合函数的列。索引的正确使用可以显著提升查询性能。
分批处理:考虑将大查询拆分成多个较小的查询,分批处理数据,避免一次性处理大量数据导致性能下降。
定期维护统计信息:定期更新表的统计信息,确保数据库优化器能够正确选择执行计划。
优化存储过程逻辑:检查存储过程内部的逻辑,尽量简化和优化查询,避免不必要的计算和操作。
缓存查询结果:如果某些数据不经常变化,可以考虑缓存查询结果,减少重复计算的开销。
使用临时表:在需要的情况下,可以考虑使用临时表来存储中间结果,减少数据读取和处理的复杂性。
通过以上方法,您可以逐步优化存储过程的执行性能,使其在较短的时间内完成执行。如果您需要更具体的帮助或有其他问题,请随时告诉我。祝您顺利优化存储过程的执行时间!
可以试下两个方案
第一,添加条件,分批插入,比如,工号小于1000的插入一次,大于1000的插入一次。
第二,增加索引,创建视图,从视图里查询插入
(你的sql没复制全吧,分组函数要补全吧)
提供一个思路:新建一个视图,它是t1和t2的关联表。
表都是普通的表,没设置分区、主键等