条件删除数据慢的问题(mysql)
SET autocommit=0;
DROP PROCEDURE IF EXISTS deleteTransfer1Scheme;
CREATE PROCEDURE deleteTransfer1Scheme()
BEGIN
DECLARE foriginStationId varchar(36);
DECLARE fterminalStationId varchar(36);
DECLARE fstationCount INT;
DECLARE num INT DEFAULT 0;
DECLARE rs_cursor CURSOR FOR SELECT originStationId,terminalStationId,MIN(stationCount) + 3 stationCount FROM tb_bus_scheme_286 WHERE transferCount=1 GROUP BY originStationId, terminalStationId;
OPEN rs_cursor;
cursor_loop:LOOP
FETCH rs_cursor INTO foriginStationId, fterminalStationId, fstationCount;
delete from tb_bus_scheme_286 where originStationId=foriginStationId AND terminalStationId=fterminalStationId AND stationCount=fstationCount;
if num=1000 then
commit;
SET num = 0;
else
SET num = num + 1;
end if;
END LOOP cursor_loop;
commit;
CLOSE rs_cursor;
END
CALL deleteTransfer1Scheme();
请问有优化的地方吗,或者条件删除大量数据的好的思路?
DROP PROCEDURE IF EXISTS deleteTransfer1Scheme;
CREATE PROCEDURE deleteTransfer1Scheme()
BEGIN
DECLARE foriginStationId varchar(36);
DECLARE fterminalStationId varchar(36);
DECLARE fstationCount INT;
DECLARE num INT DEFAULT 0;
DECLARE rs_cursor CURSOR FOR SELECT originStationId,terminalStationId,MIN(stationCount) + 3 stationCount FROM tb_bus_scheme_286 WHERE transferCount=1 GROUP BY originStationId, terminalStationId;
OPEN rs_cursor;
cursor_loop:LOOP
FETCH rs_cursor INTO foriginStationId, fterminalStationId, fstationCount;
delete from tb_bus_scheme_286 where originStationId=foriginStationId AND terminalStationId=fterminalStationId AND stationCount=fstationCount;
if num=1000 then
commit;
SET num = 0;
else
SET num = num + 1;
end if;
END LOOP cursor_loop;
commit;
CLOSE rs_cursor;
END
CALL deleteTransfer1Scheme();
请问有优化的地方吗,或者条件删除大量数据的好的思路?
...全文
相关推荐
MySQL慢SQL定位指南[项目源码]
本文详细介绍了如何定位和优化MySQL中的慢SQL。首先解释了慢SQL的定义,即执行时间超过阈值的SQL语句。接着提供了定位慢SQL的具体步骤,包括设置慢查询日志、收集日志、使用EXPLAIN分析查询计划、检查索引、优化SQL语句以及执行性能测试。文章还详细说明了如何查询是否开启慢查询、设置慢查询时间限制以及如何分析慢SQL日志。最后,介绍了使用EXPLAIN命令分析SQL语句的各个参数,帮助读者全面理解SQL执行计划,从而有效优化数据库性能。
MySQL慢SQL语句常见诱因以及解决方法
在本篇文章里小编给大家整理的关于MySQL慢SQL语句常见诱因以及解决方法,有需要的朋友们可以学习下。
mysql批量删除大量数据
主要介绍了mysql批量删除大量数据的相关资料,需要的朋友可以参考下
MySQL删除表数据的方法
在MySQL中有两种方法可以删除数据,一种是DELETE语句,另一种是TRUNCATE TABLE语句。DELETE语句可以通过WHERE对要删除的记录进行选择。而使用TRUNCATE TABLE将删除表中的所有记录。因此,DELETE语句更灵活。 如果要清空表中的所有记录,可以使用下面的两种方法: DELETE FROM table1 TRUNCATE TABLE table1 其中第二条记录中的TABLE是可选的。 如果要删除表中的部分记录,只能使用DELETE语句。 DELETE FROM table1
mysql 一条语句删除多表数据
平时工作中可以用到的,将关联的表中的数据,用一条语句删除,节省数据库链接资源


