大表批量删除1000行存储过程

简介:

对于像这样的删除,还是按照我们默认的规则,在量很大的情况下,分批次删除是最快的,加limit 1000(推荐的参考值,可变),加入循环中处理,要比一下子删除快很多很多。

 

执行call RUS_CommonFriend_delete_1k(用户ID);
 
默认删除1000行,然后休眠3秒,再轮训,直到把检索的行全删除。
 
 
DELIMITER $$
 
USE RUSDB$$
 
DROP PROCEDURE IF EXISTS RUS_CommonFriend_delete_1k$$
 
CREATE PROCEDURE RUS_CommonFriend_delete_1k(IN v_smalluserid INT)
 
BEGIN
 
    del_1k:LOOP
 
    delete from RUSDB.RUS_CommonFriend where SmallUserId = v_smalluserid limit 1000;
 
    select row_count() into @count;
 
    IF @count = 0 THEN
 
        select CONCAT ('RUSDB.RUS_CommonFriend SmallUserId = ',v_smalluserid,' is ',@count,' rows.') as RUS_CommonFriend_delete_finish;
 
        LEAVE del_1k;
 
    END IF;
 
    select sleep(3);
 
    END LOOP del_1k;
 
END$$
 
DELIMITER ;

 

 

 

本文转自 liang3391 51CTO博客,原文链接:http://blog.51cto.com/liang3391/820280


相关文章
|
SQL 存储 数据库管理
走向DBA[MSSQL篇] 针对大表 设计高效的存储过程【原理篇】 附最差性能sql语句进化过程客串
原文:走向DBA[MSSQL篇] 针对大表 设计高效的存储过程【原理篇】 附最差性能sql语句进化过程客串 测试的结果在此处 本篇详解一下原理 设计背景 由于历史原因,线上库环境数据量及其庞大,很多千万级以上甚至过亿的表。
1190 0
|
存储 Java 关系型数据库
java调用mysql存储过程
在 Java 中调用 MySQL 存储过程主要借助 JDBC(Java Database Connectivity)。其核心原理是通过 JDBC 与 MySQL 建立连接,调用存储过程并处理结果。具体步骤包括:加载 JDBC 驱动、建立数据库连接、创建 CallableStatement 对象、设置存储过程参数并执行调用。此过程实现了 Java 程序与 MySQL 数据库的高效交互。
|
存储 关系型数据库 MySQL
【YashanDB知识库】MySQL返回结果集的存储过程的改写方法
本文介绍了将MySQL存储过程改写至YashanDB的解决方案。由于MySQL存储过程可直接返回结果集,而YashanDB需通过返回SYS_REF_CURSOR的函数实现类似功能,因此需要对代码进行转换。示例中展示了如何将MySQL存储过程`proc1`改写为YashanDB函数,并调整JDBC应用代码以适配REF_CURSOR输出参数,从而正确获取查询结果。此方法确保了跨数据库场景下的兼容性与功能性。
|
存储 SQL NoSQL
|
存储 SQL 关系型数据库
MySql数据库---存储过程
MySql数据库---存储过程
231 5
|
存储 关系型数据库 MySQL
MySQL 存储过程返回更新前记录
MySQL 存储过程返回更新前记录
274 3
|
存储 SQL 关系型数据库
MySQL 存储过程错误信息不打印在控制台
MySQL 存储过程错误信息不打印在控制台
327 1
|
存储 SQL 关系型数据库
MySQL数据库进阶第四篇(视图/存储过程/触发器)
MySQL数据库进阶第四篇(视图/存储过程/触发器)