`
peterll210
  • 浏览: 3385 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
最近访客 更多访客>>
社区版块
存档分类
最新评论

删除海量数据的方法

阅读更多
批量删除海量数据通常都是很复杂及缓慢的,方法也很多,但是通常的概念是:分批删除,逐次提交。
下面是我的删除过程,我的数据表可以通过主键删除,测试过Delete和For all两种方法,for all在这里并没有带来性能提高,所以仍然选择了批量直接删除。

首先创建一下过程,使用自制事务进行处理:


create or replace procedure delBigTab
(
p_TableName       in    varchar2,
p_Condition       in    varchar2,
p_Count        in    varchar2
)
as
pragma autonomous_transaction;
n_delete number:=0;
begin
while 1=1 loop
EXECUTE IMMEDIATE
'delete from '||p_TableName||' where '||p_Condition||' and rownum <= :rn'
USING p_Count;
if SQL%NOTFOUND then
exit;
else
n_delete:=n_delete + SQL%ROWCOUNT;
end if;
commit;
end loop;
commit;
DBMS_OUTPUT.PUT_LINE('Finished!');
DBMS_OUTPUT.PUT_LINE('Totally '||to_char(n_delete)||' records deleted!');
end;


以下是删除过程及时间:

SQL> create or replace procedure delBigTab
  2  (
  3    p_TableName       in    varchar2,
  4    p_Condition       in    varchar2,
  5    p_Count        in    varchar2
  6  )
  7  as
  8   pragma autonomous_transaction;
  9   n_delete number:=0;
10  begin
11   while 1=1 loop
12     EXECUTE IMMEDIATE
13       'delete from '||p_TableName||' where '||p_Condition||' and rownum <= :rn'
14     USING p_Count;
15     if SQL%NOTFOUND then
16        exit;
17     else
18              n_delete:=n_delete + SQL%ROWCOUNT;
19     end if;
20     commit;
21   end loop;
22   commit;
23   DBMS_OUTPUT.PUT_LINE('Finished!');
24   DBMS_OUTPUT.PUT_LINE('Totally '||to_char(n_delete)||' records deleted!');
25  end;
26  /

Procedure created.

SQL> set timing on
SQL> select min(NUMDLFLOGGUID) from HS_DLF_DOWNLOG_HISTORY;

MIN(NUMDLFLOGGUID)
------------------
          11000000

Elapsed: 00:00:00.23
SQL> exec delBigTab('HS_DLF_DOWNLOG_HISTORY','NUMDLFLOGGUID < 11100000','10000');

PL/SQL procedure successfully completed.

Elapsed: 00:00:18.54
SQL> select min(NUMDLFLOGGUID) from HS_DLF_DOWNLOG_HISTORY;

MIN(NUMDLFLOGGUID)
------------------
          11100000

Elapsed: 00:00:00.18
SQL> set serveroutput on
SQL> exec delBigTab('HS_DLF_DOWNLOG_HISTORY','NUMDLFLOGGUID < 11200000','10000');
Finished!
Totally 96936 records deleted!

PL/SQL procedure successfully completed.

Elapsed: 00:00:18.61
10万记录大约19s

SQL> exec delBigTab('HS_DLF_DOWNLOG_HISTORY','NUMDLFLOGGUID < 11300000','10000');
Finished!
Totally 100000 records deleted!

PL/SQL procedure successfully completed.

Elapsed: 00:00:18.62
SQL> exec delBigTab('HS_DLF_DOWNLOG_HISTORY','NUMDLFLOGGUID < 11400000','10000');
Finished!
Totally 100000 records deleted!

PL/SQL procedure successfully completed.

Elapsed: 00:00:18.85
SQL>
SQL> exec delBigTab('HS_DLF_DOWNLOG_HISTORY','NUMDLFLOGGUID < 13000000','10000');
Finished!
Totally 1000000 records deleted!

PL/SQL procedure successfully completed.

Elapsed: 00:03:13.87

100万记录大约3分钟
SQL> exec delBigTab('HS_DLF_DOWNLOG_HISTORY','NUMDLFLOGGUID < 20000000','10000');

Finished!
Totally 6999977 records deleted!

PL/SQL procedure successfully completed.

Elapsed: 00:27:24.69
700万大约27分钟

以上过程仅供参考.
分享到:
评论

相关推荐

    常用大数据量,海量数据处理方法,算法总结

    海量数据处理方法总结 本文总结了常用的海量数据处理方法,包括 Bloom filter、Hashing 和 bit-map 等。这些方法可以用来解决大数据量的问题,例如数据字典、判重、集合求交集等问题。 Bloom Filter Bloom filter...

    大数据量,海量数据 处理方法总结

    ### 大数据量,海量数据处理方法总结 在IT领域,特别是大数据分析、数据库管理和算法设计方面,处理海量数据的能力是至关重要的技能之一。本文旨在总结处理大数据量、海量数据的有效方法,涵盖从理论基础到实际应用...

    大数据量,海量数据_处理方法总结

    ### 大数据量、海量数据处理方法总结 #### 一、引言 随着互联网技术的发展,数据量呈现出爆炸性增长的趋势。如何高效地处理这些大数据成为了一项挑战性的任务。在IT行业,尤其是在搜索引擎、社交媒体等领域,处理...

    文件系统技术内幕:大数据时代海量数据存储之道.docx

    文件系统技术内幕:大数据时代海量数据存储之道 大数据时代的到来带来了海量数据的挑战,如何高效、可靠地存储和管理这些数据成为企业和组织面临的重要问题。文件系统技术作为信息管理的重要组成部分,在海量数据...

    海量数据处理的方法

    ### 海量数据处理的方法详解 #### 一、Bloom Filter **定义**: Bloom Filter是一种高效的数据结构,用于快速判断一个元素是否在一个集合中。它使用位数组和多个哈希函数来实现。虽然Bloom Filter可能会产生误报...

    常见的海量数据处理方法

    ### 常见的海量数据处理方法 在大数据时代,如何高效、准确地处理海量数据是许多企业和组织面临的关键挑战之一。本文将详细介绍几种实用的数据处理方法,包括但不限于算法优化和技术选择,旨在帮助读者更好地理解和...

    百亿级别海量数据删除方案(不停机维护)

    ### 百亿级别海量数据删除方案(不停机维护) #### 背景介绍 某大型中央企业使用SAP系统管理其业务数据,该系统自2006年起积累了大量历史数据,时间跨度至2017年。随着时间的推移,数据库规模逐渐扩大,达到了约7...

    大数据量,海量数据 处理方法总结.pdf

    在处理大数据量和海量数据时,面临的挑战包括数据存储、计算效率和查询速度等。传统的数据处理方法无法有效应对这种规模的数据,因此,学术界和工业界提出了一系列专用技术。以下总结了这些处理方法的核心原理、适用...

    大数据量,海量数据处理方法总结[转][文].pdf

    【大数据量,海量数据处理方法总结】 大数据量的处理是现代信息技术领域的重要课题,尤其在互联网巨头如百度、谷歌和腾讯等公司中,这类问题尤为常见。本文将概述几种处理海量数据的有效方法,包括Bloom Filter、...

    C++海量数据求最大值程序

    在C++编程中,处理海量数据是一项挑战,尤其是在找出...分析这个代码可以帮助我们理解具体如何运用上述方法来处理海量数据并找到最大值。通过学习和理解这段代码,我们可以掌握在实际项目中处理大数据问题的关键技巧。

    如何处理海量数据.pdf

    ### 如何处理海量数据 #### 一、挑战与难点 处理海量数据是一项极其复杂且具有挑战性的任务。随着数据量的急剧增长,传统的手工处理方式已经无法满足需求,需要借助现代的技术手段来进行高效的管理和分析。海量...

    虚拟列表快速显示海量数据

    在IT行业中,尤其是在开发大型数据应用时,如何高效地处理和显示海量数据是一个常见的挑战。`DataGridView`控件是Windows Forms应用程序中常用的一种用于显示表格数据的组件,它提供了丰富的功能,包括排序、筛选和...

    海量数据查询优化

    在IT行业中,数据库管理和优化是至关重要的领域,特别是在处理海量数据时。本篇文章将深入探讨“海量数据查询优化”这一主题,包括聚集与非聚集索引的区别,以及如何利用索引来提升查询性能。 首先,我们要理解什么...

    SQL 海量数据查询

    ### SQL Server 海量数据处理:查询、插入与删除 在现代数据分析与企业级应用中,高效处理海量数据是IT专业人员必须掌握的关键技能之一。本文将深入探讨SQL Server环境下如何进行大规模数据的操作,包括查询、插入...

    大数据量,海量数据-处理方法总结

    大数据量、海量数据处理方法总结 大数据量的问题是许多面试笔试中经常出现的问题,许多涉及到海量数据的公司经常会问到,这些方法可以基本上处理绝大多数遇到的问题。 1. Bloom Filter: Bloom Filter 是一种空间...

    海量数据处理总结(大量数据处理)

    本文将围绕“海量数据处理”这一主题,详细探讨几种核心的技术方法,包括Bloom Filter、Hashing以及Bit-Map,它们在实际场景中的应用以及优化策略。 #### 一、Bloom Filter:高效的空间换时间 Bloom Filter是一种...

    基于SQL的电网海量数据属性约简方法.pdf

    基于SQL的电网海量数据属性约简方法 本文提出了一种基于SQL的电网海量数据属性约简方法,旨在解决电网海量数据的冗余问题。该方法结合了粗糙集理论和数据库技术,将粗糙集操作转化为SQL的统计操作,实现了电网信息...

    一种基于云计算的海量数据分布式存储策略.pdf

    在当今的信息化社会中,云计算作为一种新兴的计算模式,已经成为存储和管理海量数据的重要手段。随着云计算应用的不断深入,数据存储系统逐渐转向分布式存储模式,以满足互联网服务需求的持续增长。传统的单一服务器...

    海量点云数据的重复点删除

    基于PCL写的一个删除点云数据中的重复点的程序,也可以稍作修改删除数组中的重复点。目前测试一个四千万个点的点云数据,其中包含有一千万个重复点,运行时间为50s。 文件中是源码,其中包含CMakeLists.txt,可通过...

Global site tag (gtag.js) - Google Analytics