Sybase数据库批量删除大数据

原理:编写存储过程,使用循环,每次删除最多n条记录,然后清除log,直到所有记录都删除

要删除必然要根据某个字段作为条件去删除,Sybase针对不同数据类型的字段有不同的函数,这个需要大家自己去体会,当然不同类型去查询效率肯定不同。

一般公司业务都会根据具体字段用来做条件去删除数据,这里给出三种常用数据类型的处理方法,欢迎大家与我交流。


按时间戳类型删除

 

-- 创建存过,这里以数字型参数为例

create procedure sp_delete_records

  ( @inputYear numeric(10) )

as       

         set  rowcount 10000

         select 1

         while(@@rowcount>0)          

           begin          

                    dump tran your_database with truncate_only          

                    delete from your_table_name where datepart(year, MY_DATE) = @inputYear

           end

         set  rowcount 0

return

-- 调用存过,并传入参数

exec sp_delete_records 2017

2按字符串型字段去删除(截取再转换为数字类型去判断)

根据YEAR字段去统计your_table 表

create procedure sp_delete_records

  ( @inputYear numeric(10) )

as       

         set  rowcount 3462

         select 1

         while(@@rowcount>0)          

           begin          

                    dump tran your_database  with truncate_only          

                    delete from your_table_name where convert(numeric         (22),substring(convert(varchar(22),YEAR),1,4)) = @inputYear

           end

         set  rowcount 0

return

-- 调用存过,并传入参数

exec sp_delete_records 2018

3 按数字型字段去删除

create procedure sp_delete_records

  ( @inputYear numeric(10) )

as       

         set  rowcount 1000

         select 1

         while(@@rowcount>0)          

           begin          

                    dump tran your_database  with truncate_only          

                    delete from your_table_name  where year = @inputYear

           end

         set  rowcount 0

return

-- exec sp_delete_records 2019

经过测试,sybase调用存储过程,每调用一次,会执行8次相关的DML语句操作

所以我们要根据要删除表数据的大小,合理分配循环的次数,这样以提高服务器的执行效率。

还参考了以下资料,原先一个不会写存储过程的小白也会了,在此对作者表示感谢:

参考:

https://blog.csdn.net/skyfred/article/details/51890210

https://blog.csdn.net/lingmao555/article/details/52298582

https://softbear.iteye.com/blog/638427

猜你喜欢

转载自blog.csdn.net/qaz5209103/article/details/86310321
今日推荐