统计数据时,sql执行超时,如何处理

张开发
2026/4/4 18:25:56 15 分钟阅读
统计数据时,sql执行超时,如何处理
在工作中除了开发有时还需要做一些数据统计。统计数据时sql执行超时。可以通过以下手段处理。一、优化sql首先通过 EXPLAIN 查看执行计划看有没有走索引能加索引的加索引没有走索引的尽量优化。常见的sql优化见 https://blog.csdn.net/sinat_32502451/article/details/136075255二、临时调大超时时间如果默认的超时时间是1分钟可以先临时调大待sql 执行完毕再调整回去。SET SESSION max_execution_time 120000; -- 单位是毫秒 (ms)这里设为 120 秒或者是-- 通过 /* MAX_EXECUTION_TIME(120000) */ 调整这次查询的超时时间。 SELECT /* MAX_EXECUTION_TIME(60000) */ user_id FROM t_users ;三、建临时表如果一个 sql 很复杂那么就要尽量拆分可以通过临时表来协助。比如SELECT u.user_id, t.event_name FROM t_users u LEFT JOIN ( SELECT DISTINCT user_id, event_name FROM t_activities WHERE date BETWEEN 2020-07-31 AND 2020-08-31 ) t ON u.user_id t.user_id;这个sql 可以先将 LEFT JOIN 里面(也可以是子查询) 的数据先放进临时表。注意如果某些sql不允许使用 CREATE TEMPORARY TABLE 这种语法也可以用 CREATE TABLE。-- 第一步创建并填充临时表只存去重后的 ID CREATE TEMPORARY TABLE tmp_active_users AS SELECT DISTINCT user_id FROM t_activities WHERE date BETWEEN 2020-07-31 AND 2020-08-31; -- 第二步直接关联查询 SELECT u.user_id FROM t_users u JOIN tmp_active_users t ON u.user_id t.user_id;这种用临时表处理后数据量会极大地下降sql 执行时间会降低。四、CSV 导出导入如果连建临时表都超时了那也可以先 SELECT , 然后用 CSV 导出再导入。导出导入格式最好用 CSV, 非常轻量。详情见https://blog.csdn.net/sinat_32502451/article/details/159658198五、写代码统计某些太复杂的 sql可以先分批查出表数据导出到 excel最后再通过写代码读取excel数据进行统计。

更多文章