+ -
当前位置:首页 → 问答吧 → 请教perl插入数据到oracle的效率问题!!

请教perl插入数据到oracle的效率问题!!

时间:2011-01-18

来源:互联网

我的代码如下:
use DBI;
use IO::File;
use POSIX qw(strftime);

$input = IO::File->new("test.bcp");


$dbh=DBI->connect("dbi:Oracle:host=$host;sid=orcl", $user, $passwd) || die "Database connection not made: $DBI::errstr";
$sth = $dbh->prepare("INSERT INTO table(14个字段) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?)");

while (defined($line = $input->getline()))
{
    chomp($line);
     @datarry=split(/\t/,$line);
    $snum++;

        。。。对每个字段的处理。。。

   $sth->execute(14个变量);   
   
}
$input->close();
$sth->finish();
$dbh->disconnect();
exit;

上面是我的代码,因为项目保密的关系,数据库字段被我隐藏了。
我是从一个文件读取每行记录,每行记录有14个字段,每次读一行入库。文件有3千5百多万行记录。用我的脚本执行了
差不多2天。应该是有严重的效率问题吧。
请高手帮我分析一下。数据库应该是没有什么问题的。同事拿c语言写入库程序感觉入库快多了。

作者: freecr_cu   发布时间: 2011-01-18

用C有多快?1小时?

作者: yiten   发布时间: 2011-01-18

为啥不能直接用sql loader?

作者: lkk2003rty   发布时间: 2011-01-18



QUOTE:
为啥不能直接用sql loader?
lkk2003rty 发表于 2011-01-18 16:20




    因为他需要“。。。对每个字段的处理。。。”吧?LZ

作者: yiten   发布时间: 2011-01-18

回复 yiten


是的,这个数据文件文件有近4G,每行有不止14个字段,我只取14个字段信息,处理后再入库。
我是感觉慢,我感觉3千多万行数据部应该入库近两天吧,太不可思议了,我是头一回遇到这么大数据量。
也不知道是不是模式匹配split那里慢。要是c语言的话,我可以拿gprof分析函数性能,perl还真不知道程序里是哪一步最慢了.

作者: freecr_cu   发布时间: 2011-01-18

如果用perl可以 用$sth_o->bind_param_array(),$sth_o->execute_array()。
如果是为了效率可以用oracle的 external table

作者: lijian_123   发布时间: 2011-01-18

你一条一条的insert肯定慢

作者: lijian_123   发布时间: 2011-01-18

回复 yiten


    囧 木有注意看  看看楼主是怎么处理字段的  如果sqlloader 能做到的话 就用sqlloader

作者: lkk2003rty   发布时间: 2011-01-18