|
MySQL.RU - Webboard
Вернуться
(Оптимизация) Пакетная вставка с помощью DBI? (Sergey) 22/06/2003 - 01:30:06
Re: (Оптимизация) Пакетная вставка с помощью DBI? (walrus) 23/06/2003 - 02:20:33
Re: Я понимаю что это дико выглядит.. (Sergey) 23/06/2003 - 10:26:23
Re: проблема не в дби.. (Sergey) 23/06/2003 - 13:12:16
> Original message text:
> From: Sergey - 22/06/2003 - 01:30:06
> Subject:(Оптимизация) Пакетная вставка с помощью DBI?
> -----------------
> Есть примитивная таблица (4 поля), в нее за раз надо перенести существенный объем данных - около 6000 записей вставить в нее..
>
> можно формировать для каждой записи свой запрси выполнять его в цикле, подобный подход меня не устраивает тем, что занимает не менее часа.
>
> while($case) {
> $sql="insert into mt1 (a,b,c,d) values ('$a','$b','$c','$d')";
> $sth=$dbh->prepare($sql);
> $sth->execute();
> ....
> }
>
> Как оптимизировать данный процесс? можно ли в цикле сгенирировать список запросов, а потом выполнить его за раз?
>
> Спасибо.
>
From: Sergey - 23/06/2003 - 10:26:23
Subject:Я понимаю что это дико выглядит..
-----------------
Особенно Если учесть, что машина п3-1000. Но я не знаю почему так.. (Спасибо за ответ "2)". Это то что я хотел узнать.)
Вот цикл который работает час:
foreach $port (@srvcs) {
foreach $target (@sites) {
foreach $time (@times) {
foreach $user (@clients) {
$sz=$ipfw_sort{"$time-$user-$target-$port"};
if($sz) {
$time=~/(.+)-(\d+)/;
$sql="insert into ipfw_sort values ('$1','$2','$user','$target','$port','$sz')";
$sth = $dbh->prepare($sql);
$sth->execute();
$status=sprintf("%02.0f",100*$qryctr/keys(%ipfw_sort));
if($prev_st ne $status) {print "\r$status \%";$prev_st=$status;}
$qryctr++;
}
}
}
}
}
Из всех операций в цикле, по идее, самые медленные это prepare() и execute(). Т.е. мне видятся два варианта:
1) Я некорректно использую DBI. - и все тормозит именно из-за него.
2) Столь существенное влияние оказывает работа с регэкспом и хешами (но это, мне кажется, маловероятным.
[Это сообщение - спам!]
Последние сообщения из форума
Уважаемые посетители форума MySQL.RU!
Убедительная просьба, прежде чем задавать свой вопрос в этом форуме, обратите внимание на разделы:
- ответы на наиболее часто задаваемые вопросы - FAQ
- раздел документация
- раздел поиск по сообщениям форума и документации
Также, старайтесь наиболее подробно указывать свою ситуацию (версию операционной системы, версию MySQL,
версию программного обеспечения, по которому возникает вопрос, текст возникающих ошибок, и др.)
Помните, чем конкретнее Вы опишете ситуацию, тем больше шансов получить реальную помощь.
9216
|
|