`
q530414675
  • 浏览: 4049 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

数据库海量删除

SQL 
阅读更多
批量删除海量数据通常都是很复杂及缓慢的,方法也很多,但是通常的概念是:分批删除,逐次提交。 下面是我的删除过程,我的数据表可以通过主键删除,测试过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分钟
分享到:
评论

相关推荐

    基于Oracle数据库海量数据的查询优化研究.pdf

    "基于Oracle数据库海量数据的查询优化研究" 本文主要探讨了 Oracle 数据库海量数据的查询优化研究,通过对 Oracle 数据库的分析,讨论了分页查询技术、SQL 语句优化、索引技术等查询优化方法,并对 Oracle 数据库的...

    经典面试题——海量数据库

    【海量数据库】是IT面试和笔试中常见的主题,主要探讨如何在处理大量数据时有效地存储、检索和操作数据。以下是对这个主题的详细说明: 1. **Bloom Filter**: - Bloom Filter是一种空间效率极高的概率型数据结构...

    基于oracle数据库海量数据的查询优化研究 (2).pdf

    面对海量数据的挑战,优化查询性能至关重要。本文主要探讨了三个关键技术:索引技术、分区技术和SQL语句优化。 **一、索引技术** 索引是提高查询效率的关键手段,它能够在数据表中创建一种排序结构,加速对特定数据...

    数据库参考开发手册,各种数据库,数据库大全

    数据库操作包括数据插入、查询、更新和删除,以及事务处理、并发控制和恢复机制。SQL是用于操作关系型数据库的标准语言,掌握其基本语法和高级特性能有效提升数据库操作效率。数据库优化涉及索引策略、查询优化、...

    数据库讲义 很好的数据库讲义,适合学习数据库

    9. **分布式数据库**:随着大数据时代的到来,分布式数据库成为了解决海量数据存储和处理的方案。讲义可能涵盖了分布式数据库的概念、一致性模型(如CAP定理)以及分布式数据库的实现方式。 10. **NoSQL数据库**:...

    Oracle_数据库中的海量数据处理

    ### Oracle数据库中的海量数据处理 #### 数据仓库系统的特点与Oracle数据仓库简介 数据仓库系统是一种专门设计用于存储、管理和分析企业历史数据的信息管理系统。它的特点包括面向主题、集成性、随时间变化以及非...

    数据库学习-数据库系统.doc

    关系模型因其易理解、使用方便、易于维护和强大的查询能力而广泛使用,但也存在性能、固定表结构、并发读写和海量数据处理的局限。 【数据库系统结构】 数据库系统通常采用三级模式结构,包括外模式(用户视图)、...

    BigDb海量数据库

    ### BigDb海量数据库知识点解析 #### 一、BigDb海量数据库概述 BigDb是一款高性能的海量数据库管理系统,其设计目标在于解决大规模数据处理时的速度与灵活性问题。它不仅支持传统的关系型数据库特性,如数据唯一性...

    海量数据库的查询优化索引总结

    【海量数据库的查询优化索引总结】 在当前的信息化时代,海量数据的处理已经成为许多企业和机构面临的重要挑战,尤其是在公安、金融、电商等行业的大型系统中。数据库作为数据的主要存储和管理工具,其性能直接影响...

    12章-数据库管理系统-数据库系统概论(第五版).doc

    3. 数据存取:提供用户对数据的操作功能,实现对数据库数据的检索、插入、修改和删除。 4. 数据库事务管理和运行管理:包括多用户环境下的事务管理功能和安全性、完整性控制功能等。 5. 数据库的建立和维护:包括...

    城市三维地理信息系统中海量数据的数据库组织与管理.pdf

    ### 城市三维地理信息系统中海量数据的数据库组织与管理 #### 1. 引言 城市三维地理信息系统(3DUGIS)是能够对城市区域内的空间对象进行真实三维描述、可视化以及分析管理的地理信息系统。相较于传统的二维GIS...

    海量数据库的设计及应用.pdf

    ### 海量数据库设计及应用的关键知识点 #### 一、关系数据库(RDB)与SQL的基础概念 - **RDB的特性及用户的作用**:关系数据库(RDB)是一种基于关系模型的数据存储方式,通过表格的形式组织数据,并使用SQL语言进行...

    中级高级软考!! PDF 数据库系统原理

    SQL(Structured Query Language)是用于操作关系数据库的标准语言,包括数据查询、数据更新、数据插入和数据删除等操作。 数据库设计包括概念设计、逻辑设计和物理设计三个阶段。概念设计主要关注业务需求,将现实...

    西安交通大学数据库课件

    学习者将了解到如何使用SQL进行数据查询、插入、更新和删除,以及如何创建和修改数据库结构,如创建表、索引和视图。 【数据库设计】 数据库设计包括需求分析、概念设计、逻辑设计和物理设计。在西交大的课程中,...

    数据库课件施伯乐第三版

    3. 大数据技术:处理海量、高增长和多样性的数据,如Hadoop和NoSQL数据库。 4. 数据仓库和数据挖掘:用于数据分析和决策支持。 5. Web数据库:适应互联网环境,支持XML和JSON等数据格式。 第 3 章 SQL 语言是数据库...

    数据库实用教程ppt

    SQL(Structured Query Language)是标准的数据库查询语言,它的基本语法包括数据查询、数据插入、数据更新和数据删除等操作。 数据库设计是关键的一环,包括概念设计、逻辑设计和物理设计。概念设计通常采用实体-...

    数据库简介数据库简介数据库简介

    SQL(Structured Query Language)是用于处理关系型数据库的标准编程语言,可以用来创建、查询、更新和删除数据库中的数据。SQL查询语言的强大之处在于其简洁性和灵活性,使得用户能够高效地从海量数据中提取所需...

    数据库系统概论第四版课件.rar

    数据库系统通过使用特定的数据模型(例如关系型数据模型)和查询语言(如SQL)来支持数据的创建、查询、更新和删除操作。它们还提供了数据的一致性、完整性和安全性,确保数据的准确性和可靠性。 “系统概论”通常...

    保存当前经纬度到数据库

    如果需要修改或删除记录,UPDATE和DELETE语句将派上用场。查询操作则可以通过SELECT语句实现,比如根据特定条件查找最近的位置记录。 为了简化数据库操作,开发者通常会使用ORM(对象关系映射)框架,如Android的...

    中国人民大学数据库教程

    你将学习如何使用SELECT语句来获取特定的数据,如何使用INSERT、UPDATE和DELETE来添加、修改和删除数据,以及如何使用JOIN操作来合并来自多个表的信息。 此外,教程可能会讨论数据库设计,包括需求分析、概念设计、...

Global site tag (gtag.js) - Google Analytics