Оптимизация кода

Discussion in 'PHP' started by -=Zhenek=-, 9 Mar 2011.

  1. -=Zhenek=-

    -=Zhenek=- Elder - Старейшина

    Joined:
    31 Dec 2007
    Messages:
    271
    Likes Received:
    77
    Reputations:
    1
    Всем привет.

    Такая проблема.. Есть менеджер спам баз (писал сам) , но возникает большая нагрузка на базу при просмотре списка проектов и количества мыл в них и база постоянно падает (длина запроса по 100 сек)

    И при добавлении в базу тоже самое...

    Вот вывод проектов со списком отспамленных и свободных мыл.
    PHP:
     $res mysql_query("SELECT * FROM proekt WHERE user='$login'") or die(mysql_error());
    $count 0;
    while(
    $mget=mysql_fetch_row($res)) {
    $nn $mget[2];
    if(
    $count == 0) { $col ="#A2A2A2"$count=1;}else{$col ="#DDDDDD"$count=0;}
    $ress mysql_query("SELECT * FROM base WHERE proekt='$mget[0]'");
    $k mysql_num_rows($ress);
    $ress mysql_query("SELECT * FROM base WHERE proekt='$mget[0]' AND send='1'");
    $k_s mysql_num_rows($ress);
    $sv=$k-$k_s;
    echo 
    "<tr>
       <td width=20% bgcolor=
    $col>$nn&nbsp; Всего: <font color=green>$k</font> &nbsp; Отспамлено : <font color=red>$k_s</font> Свободно: <font color=blue>$sv</font></td>
       <td width=20% bgcolor=
    $col><center><a href=?do=manager_p&act=edit&id=$mget[0]>Редактировать</a></center></td>
         <td width=20% bgcolor=
    $col><a href=?do=manager_p&act=del&id=$mget[0]  OnSubmit=return confirm('Подтвердите удаление')>Удалить</a></td>
     </tr>
     
     "
    ;

    Как видно тут делается 2 запроса на каждый проект. И при общей базе в миллиона полтора мыл, для каждого из перебирать базу.. а когда 10 проектов то запросов становится уже 20.


    а это добавление в базу.
    PHP:
    function Addacc_fromfile($text,$proekt,$login) { ##QUICK ADD MULTI TEXT ACC##
    $mas explode("\n",$text);
    $mas=array_unique($mas);
    $colvo=count($mas);
    $dub_colvo=0;
    foreach(
    $mas as $temp) {
    $dub=0;
    list(
    $mail,$fio) = explode(":",$temp);
    list(
    $blogin,$bdomain) = explode("@",$mail);
    $blogin str_replace(" ","",$blogin);
    $bdomain =  str_replace(" ","",$bdomain);
    $bdomain =  str_replace("\r","",$bdomain);
    if(
    $bdomain==""){$dub=1;}
    ////

    mysql_query("INSERT IGNORE INTO base(id,user,proekt,login,domain,send,fio) VALUES(null,'$login','$_POST[proekt]','$blogin','$bdomain','0','$fio')");
    }
    return 
    true;
    }
    Функции передаем сами аки, логин и проект куда добавить.
    Но парадокс,добавляя по 2000 мыл за раз я могу уложить базу минут на 10. приходится по 500,а это не серьезно совсем(


    Помогите может есть возможность придумать альтернативу?
    Думал добавление на крон поставить. но это спасет только от 30 сек лимита на выполнение, но от ограничение на длинну запроса не спасет.
    Или думал закидывать 10к мыл, аяксом делить на партии по 500 и с таймаутом грузить..но это извращение(