在Oracle
数据库中,需要插入大数据量到表中时,如一次性数据量为百万级别。通常想到的是加nologging append
等提示,提升插入数据的速度。
但还有一种方法,是从根本上改变记录的插入方式。它就是bulk insert
。
首先,创建一张普通的表t1(CREATE TABLE t1 AS SELECT * FROM dba_objects )
。
create or replace procedure test_proc is
begin
for x in (select * from dba_objects) loop
insert into t1
(owner,
object_name,
subobject_name,
object_id,
data_object_id,
object_type,
created,
last_ddl_time,
timestamp,
status,
temporary,
generated,
secondary)
values
(x.owner,
x.object_name,
x.subobject_name,
x.object_id,
x.data_object_id,
x.object_type,
x.created,
x.last_ddl_time,
x.timestamp,
x.status,
x.temporary,
x.generated,
x.secondary);
end loop;
commit;
end test_proc;
/
create or replace procedure test_proc2(p_array_size in pls_integer default 100) is
type array is table of dba_objects%rowtype;
l_data array;
cursor c is
select * from dba_objects;
begin
open c;
loop
fetch c bulk collect
into l_data limit p_array_size;
forall i in 1 .. l_data.count
insert into t1 values l_data (i);
exit when c%notfound;
end loop;
close c;
commit;
end test_proc2;
/
SQL> select b.name,a.* from v$mystat a,v$statname b where a.STATISTIC#=b.STATISTIC# and b.name in ('consistent gets','physical reads')
NAME SID STATISTIC# VALUE
---------------------------------------------------------------- ---------- ---------- ----------
consistent gets 395 50 23
PL/SQL procedure successfully completed
SQL> select b.name,a.* from v$mystat a,v$statname b where a.STATISTIC#=b.STATISTIC# and b.name in ('consistent gets','physical reads');
NAME SID STATISTIC# VALUE
---------------------------------------------------------------- ---------- ---------- ----------
consistent gets 395 50 23970
而bulk insert
致性一次,一致性读的数目为6710
。
SQL> select b.name,a.* from v$mystat a,v$statname b where a.STATISTIC#=b.STATISTIC# and b.name in ('consistent gets','physical reads');
NAME SID STATISTIC# VALUE
---------------------------------------------------------------- ---------- ---------- ----------
consistent gets 420 50 19
PL/SQL procedure successfully completed
SQL> select b.name,a.* from v$mystat a,v$statname b where a.STATISTIC#=b.STATISTIC# and b.name in ('consistent gets','physical reads');
NAME SID STATISTIC# VALUE
---------------------------------------------------------------- ---------- ---------- ----------
consistent gets 420 50 6729
因此,在大数据量插入操作时,可以采用bulk insert
方法。
分享到:
相关推荐
- 在使用BulkInsert前,确保所有实体都已正确设置主键,否则可能导致数据冲突或插入失败。 6. **适用场景**: BulkInsert最适合于一次性插入大量数据的情况,比如初始化数据库、数据迁移或批量导入导出。对于实时...
MySQL 提供了多种方法来实现大批量数据插入,包括使用批量插入语句、使用 LOAD DATA 语句、使用 MySQL 的 Bulk Insert 机制等。 在 MySQL 中,使用批量插入语句可以大大提高数据插入的速度。批量插入语句的格式如下...
### 使用BULK INSERT大批量导入数据到SQL Server 在数据库管理与开发中,高效地导入大量数据是一项重要的技能。SQL Server 提供了多种方法来处理此类需求,其中`BULK INSERT`命令因其简单且高效的特性而被广泛使用...
这个类提供了快速且高效的批量插入功能,大大提升了数据迁移的效率,尤其对于大数据量的操作而言。在本篇文章中,我们将深入探讨`SqlBulkCopy`类的使用方法及其核心特性。 `SqlBulkCopy`是.NET Framework的System....
2. **批量插入(Bulk Insert)**:SQL Server 提供了一个`SqlBulkCopy`类,用于快速地将大量数据从一个数据源(如DataTable或DataReader)复制到SQL Server表中。这比逐行插入要快得多。 ```csharp using ...
批量插入可以使用INSERT ALL语句,一次写入多行数据,如: ```sql INSERT ALL INTO table1 VALUES (value1, value2) INTO table2 VALUES (value3, value4) SELECT * FROM dual; ``` 三、BULK COLLECT 和 FORALL ...
- **BULK 插入**:特别适合于大批量数据的快速插入,能够显著提高插入效率。 综上所述,在实际应用中根据数据量大小选择合适的插入策略是非常重要的。对于大数据量的场景,推荐使用 `BULK` 插入机制来提高数据处理...
本文主要分享了在非生产环境中快速、大批量插入数据的一些经验技巧,这些技巧主要适用于Oracle数据库系统。 首先,基础的`INSERT INTO ... SELECT FROM`语句是最常见的数据迁移方式。例如: ```sql INSERT INTO tab...
简单的插入收集器。 它收集请求并将其发送到ClickHouse服务器。 安装 为您 或者 或从来源(转到1.13及更高版本): git clone https://github.com/nikepan/clickhouse-bulk cd clickhouse-bulk go build 特征 将n...
增大这个值可以提高大批量数据插入时的性能。 - `innodb_buffer_pool_size`:这个参数是InnoDB存储引擎的关键配置项,它决定了InnoDB如何缓存数据和索引。适当增加此参数可以减少磁盘I/O操作,提高插入效率。 - `...
例如,我们可以从CSV文件中读取数据,然后使用BULK COLLECT INTO将这些数据批量插入到表中。 3. **FORALL**:在收集了大量数据后,可以使用FORALL语句一次性将它们插入到数据库中,避免了循环中的单次插入,提高了...
这种方式通常比使用INSERT语句快很多,适用于大批量数据导入。例如,`LOAD DATA INFILE 'data.txt' INTO TABLE my_table;` 4. **COPY命令(PostgreSQL)**: PostgreSQL的COPY命令允许从文件系统直接导入或导出...
BULK INSERT是SQL Server中用于大批量数据导入的另一种强大工具,其语法简洁,执行效率高。与BCP相比,BULK INSERT更适用于需要在应用程序中动态执行数据导入的情况,因为它是SQL Server内部的一个语句,可以直接在T...
例如,使用`SELECT INTO`语句进行数据导入,或者利用`BULK INSERT`命令快速批量导入大量数据。在导出数据时,可以使用`WITH (NOLOCK)`读锁定提示来减少锁竞争,提高并发性能。此外,索引的合理使用也能大幅提升查询...
总之,`SqlBulkCopy`是C#中进行大批量数据插入的利器,能够显著提升数据库操作的效率,尤其是在处理大量数据时。正确理解和使用`SqlBulkCopy`,可以帮助开发者更有效地实现数据迁移和管理,提升应用的性能和用户体验...
总结来说,对于大批量数据插入,逐条插入的方式最不推荐,因为它会导致大量的数据库交互和时间浪费。事务提交是更实用的方法,适用于大多数情况,可以平衡性能和资源消耗。而批量插入则在速度上具有显著优势,但在...
connection.BulkInsert(people); ``` 这将一次性插入所有人员,比逐个插入更高效。 4. **查询**:虽然Dapper已经支持简单的查询,但Z.Dapper.Plus提供了更方便的查询方法,如: ```csharp var result = ...