使用SQL高效地插入大量数据
嗨,我经常需要在表中插入大量数据。例如,我可以从excel或文本文件中以使用SQL高效地插入大量数据,sql,oracle,excel,file-upload,plsql,Sql,Oracle,Excel,File Upload,Plsql,嗨,我经常需要在表中插入大量数据。例如,我可以从excel或文本文件中以 1,a 3,bsdf 4,sdkfj 5,something 129,else 然后,在本例中,我经常构造6条insert语句并运行SQL脚本。我发现,当我必须向服务器发送数千个小程序包时,速度很慢,这也会给网络带来额外的开销 你最好的方法是什么 更新:我正在使用ORACLE 10g。有很多方法可以加快速度 1) 在一次交易中完成。这将通过避免打开/关闭连接来加快速度 2) 直接作为CSV文件加载。如果将数据作为CSV文
1,a
3,bsdf
4,sdkfj
5,something
129,else
然后,在本例中,我经常构造6条insert语句并运行SQL脚本。我发现,当我必须向服务器发送数千个小程序包时,速度很慢,这也会给网络带来额外的开销
你最好的方法是什么
更新:我正在使用ORACLE 10g。有很多方法可以加快速度 1) 在一次交易中完成。这将通过避免打开/关闭连接来加快速度 2) 直接作为CSV文件加载。如果将数据作为CSV文件加载,则根本不需要“SQL”语句。在MySQL中,“加载数据填充”操作非常直观和简单地实现了这一点 3) 您还可以简单地将整个文件作为文本转储到名为“raw”的表中。然后让数据库使用触发器自行解析数据。这是一种黑客行为,但它会简化应用程序代码并减少网络使用 使用 另见例如
create table so13t (
id number(4),
data varchar2(20)
)
organization external (
type oracle_loader
default directory jtest /* jtest is an existing directory object */
access parameters (
records delimited by newline
fields terminated by ','
missing field values are null
)
location ('exttable-1.csv') /* the file located in jtest directory */
)
reject limit unlimited;
现在,您可以使用SQL的所有功能访问数据:
SQL> select * from so13t order by data;
ID DATA
---------- ------------------------------------------------------------
1 a
3 bsdf
129 else
4 sdkfj
5 something
我不确定这是否适用于Oracle,但在SQL Server中,您可以使用批量插入SQL语句从txt或csv文件上载数据
BULK
INSERT [TableName]
FROM 'c:\FileName.txt'
WITH
(
FIELDTERMINATOR = ',',
ROWTERMINATOR = '\n'
)
GO
只需确保表列与txt文件中的内容正确匹配即可。对于更复杂的解决方案,您可能希望使用格式文件,请参见以下内容:
您只需构造一条SQL insert语句,将所有这些行作为值(),()项包含在内。使用外部表从外部表读取文本文件或csv和大容量插入。@EJP:Oracle不接受这种语法。可能与EJP重复,您能给我举个例子吗?很好的手册
BULK
INSERT [TableName]
FROM 'c:\FileName.txt'
WITH
(
FIELDTERMINATOR = ',',
ROWTERMINATOR = '\n'
)
GO