Как уменьшить время выполнения скрипта?

X-BIT

Новичок
Как уменьшить время выполнения скрипта?

$log = "test5m.log";
$f = fopen($log, "rt");
while (!feof($f))
{
$string = fgets($f, 255);
$str=explode(" ", $string);
$host=$str[0];
$date=substr($str[3],1);

$date=substr($dt,0,2)." ".substr($dt,3,3)." ".substr($dt,7,4);
$date=date("Y-m-d",strtotime ($date));
$pageon=$str[6];

mysql_query ("INSERT INTO fromfile (ip, date, path) VALUES ('".$host."', '".$date."', '".$pageon."')");
}
fclose($f);

Мой скрипт обрабатывает 5ти метровый лог за 30с, из которых наибольшее время уходит на добавление в БД(если убрать запрос к БД, то обрабатывается лог за 3с), а скрипту нужно будет обрабатывать до 1г логи.

Подскажите как максимально уменьшить время обработки.
 

Кром

Новичок
Попробуй делать сразу много insert в одном запросе, должно помочь.
Индексы у таблицу лучше убрать при вставке и поставить их потом.

А вообще такие вставки нужно делать по крону и не беспокоится о том, сколько времени они выполняются.
 

X-BIT

Новичок
Кром каким образом?

-~{}~ 12.07.05 22:41:

icechel на 10с помогло, а как изменить значение delayed insert limit в mysql?
 

iNiTro

Guest
Может создать новый файл и просто загрузить его в табилцу ?
 

X-BIT

Новичок
Спасибо всем за помощь, результат - гиговый лог заганяю в базу за 14минут. Вот код:
$f = fopen($log, "rt") or die ("Ошибка при открытии файла\n");

$fcvs = fopen($CVSlog, "w") or die ("Ошибка при открытии файла\n");

$count = 1;
while (!feof($f))
{
$string = fgets($f, 255);
$str=explode(" ", $string);
$host=$str[0];
$date=substr($str[3],1);
$date=substr($date,0,2)." ".substr($date,3,3)." ".substr ($date,7,4);
$date=date("Y-m-d",strtotime ($date));
$pageon=$str[6];
$pageon=explode ("?", $pageon);

if(strtolower(substr($pageon[0],strlen($pageon[0])-4))!=".jpg"
&&strtolower(substr($pageon[0],strlen($pageon[0])-4))!=".gif"
&&strtolower(substr($pageon[0],strlen($pageon[0])-4))!=".css"
&&strtolower(substr($pageon[0],strlen($pageon[0])-4))!=".ico"
&&strtolower(substr($pageon[0],strlen($pageon[0])-3))!=".js")
{
fputs($fcvs, $count.';'.$host.';'.$date.';'.$pageon[0]."\r\n");
}
$count++;
}

$query = "LOAD DATA LOCAL INFILE '".$path.$CVSlog."' INTO TABLE fromfile FIELDS TERMINATED BY ';' LINES TERMINATED BY '\r\n'";

mysql_query ($query);
 
Сверху