Подскажите как оптимизировать скрипт.

FireDemon

Новичок
Подскажите как оптимизировать скрипт.

Есть таблица в которой ~6000 записей в формате MySQL.

Вот исходник
PHP:
<?
mysql_connect('localhost','root');
mysql_select_db('UTM5');
$sql='SELECT id FROM `users` WHERE is_deleted=0 AND id>99';
$result=mysql_query($sql);
$filename='/usr/local/etc/arp.dat';
$darp=date('d-m-Y.H-i-s');
exec('/usr/local/bin/sudo /bin/mv /usr/local/etc/arp.dat /home/billing/backup/arp/arp.olg.'.$darp);

if ($handle = fopen($filename, 'a')) {

fwrite($handle,'192.168.128.3 00:80:48:25:FA:19 pub'.chr(10));
# запись служебных IP, MAC ~ 20 строк

while($row=mysql_fetch_row($result))
{
  $sqlnd='SELECT value FROM `user_additional_params` WHERE userid='.$row[0].' AND paramid=1 LIMIT 1';
  $resultnd=mysql_query($sqlnd);
  if(mysql_num_rows($resultnd)>0)
  {
    $nd=mysql_result($resultnd,0,'value');
    $sqlip='SELECT value FROM `user_additional_params` WHERE userid='.$row[0].' AND paramid=2 LIMIT 1';
    $resultip=mysql_query($sqlip);
    $ip=mysql_result($resultip,0,'value');
    if(eregi('192.168.129',$ip)||eregi('192.168.130',$ip)||eregi('192.168.131',$ip)||eregi('192.168.132',$ip))
    {
      $sqlmac='SELECT value FROM `user_additional_params` WHERE userid='.$row[0].' AND paramid=3 LIMIT 1';
      $resultmac=mysql_query($sqlmac) or die(mysql_error());
      $mac=mysql_result($resultmac,0,'value');
      if((!eregi(' ',$mac)||($mac<>''))&&(eregi(':',$mac)))
      {
        if(eregi(';',$ip))
        {
          $ipe=explode(';',$ip);
          $mace=explode(';',$mac);
          $s=count($ipe);
          for($i=0;$i<$s;$i++)
          {
            $pc=$i+1;
fwrite($handle,trim($ipe[$i]).' '.trim($mace[$i]).' pub'.chr(10));
          } // End of for($i=0;$i<$s;$++)
        } else { // Else of if(eregi(';',$ip))
fwrite($handle,trim($ip).' '.trim($mac).' pub'.chr(10));
        } // End of if(eregi(';',$ip))
      } // End of if((!eregi(' ',$mac)||($mac<>''))&&(eregi(';',$mac)))
    } // End of if(!eregi(' ',$ip)||($ip<>''))
  } // End of if(mysql_num_rows($result>0))
} // End of while($row=mysql_fetch_row($result))

} else {
  echo 'Open Error';
}
system('arp -f '.$filename);
?>
Выполнение этого скрипта 2 минуты, как можно его оптимизировать?

CREATE TABLE `user_additional_params` (
`id` int(11) NOT NULL auto_increment,
`paramid` int(11) default NULL,
`userid` int(11) default NULL,
`value` varchar(255) default NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

Это структура таблицы.
3 SQL запроса, т.к. из таблицы user_additional_params надо брать 3 строки в которых paramid=1,2 и 3

Что посоветуеете сделать?
 

Krishna

Продался Java
Для начала нужно определить, что именно тормозит в скрипте. Как это сделать можно узнать поюзав поиск на тему "профайлинг".

Почему Вы сразу решили, что дело именно в запросах?
 

FireDemon

Новичок
При отключении записи в файл проодлжительность скрипта так же велика.
 

hermit_refined

Отшельник
FireDemon
нет объяснений, что вы там делаете, и результатов профайлинга - нет ответов и советов.
 
Сверху