2012-08-16 60 views
0

美好的一天。插入表格的有效方式<oracle 10g>

我们需要将大约800000条记录插入到一​​个自定义表格中,该表格现在用一个简单的插入语句花费约30+分钟。我们将从文件中读取记录并使用简单的插入语句创建一个.sql文件。我相信会有一种有效的方式来插入不同于正常方式的记录。

我试过了下面。

  1. /附加/...。由于在每个插入语句之后进行提交,所花的时间比以前多。因此,这是排除
  2. 插入所有 到c_table(X,X,X)值('','','',)
    到c_table(X,X,X)值('','' ,'',) 进入c_table(X,X,X)值('','','',) 从双选择1;

对于计数为1000的选项2是好的,但对于批量插入它再次需要超过30分钟。 如果有其他选项,请分享。

注意:我不能使用sqloader或datapump,因为我们没有数据库密码。

问候, 普拉香特

+3

如果您没有数据库密码,那么SQL文件对您有什么好处?您需要登录到数据库才能运行.sql文件。 800,000个单独的SQL语句,其中没有一个使用绑定变量会非常慢 - 大部分时间可能用于解析800,000个单独的SQL语句。 SQL * Loader将会更加高效。一个简单的Java/C#/ <<您最喜欢的语言>>应用程序创建一个带有绑定变量的单个语句并遍历80万行将会更加高效。 – 2012-08-16 00:17:30

+0

@JustinCave:这被设置为一个批处理作业进程,它将记录插入到自定义表中。它将通过说“密码将被加密的”X“用户来执行。我相信要使用SQL * Loader我们需要传递用户名/密码。请建议。 – kanna 2012-08-16 00:29:27

+0

更多关于SQL * Loader [here](http://www.orafaq.com/wiki/SQL*Loader_FAQ) – Annjawn 2012-08-16 00:31:34

回答

2

不要创建从输入数据的SQL文件。相反,请根据源文件创建一个External table并进行查询 - 您应该能够使用append选项运行整个插入,并且它应该比所有单独的插入语句花费更少的时间。

+0

我无法使用外部表,因为该文件仅在应用程序服务器中可用,并且数据目录将在数据库服务器中创建。请帮助我。我完全陷入这个问题。 – kanna 2012-08-21 03:27:49

+1

可以从应用服务器共享文件夹到数据库服务器,例如,使用Samba共享。不过,不要问我怎么样,这就是我目前工作的方式。 – 2012-08-21 07:10:42

相关问题