| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Perl: разработка для Web > Время выполнения запроса к БД 3 сек. (!) |
| Автор: forumuser 24.3.2003, 19:04 |
| Есть скрипт, который выдает сумму скачанного трафика ориентируясь по IP посетителя. Так вот если выполнять запрос даже лишь по одной дате, время выполнения составляет 3,минимум 2, секунды! Это нормально или я что-то криво сделал. #!/usr/bin/perl use DBI; use CGI qw(:all); ########################################################### ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst)=localtime(time); $hour="0".$hour if length($hour)==1; $min="0".$min if length($min)==1; $sec="0".$sec if length($sec)==1; $first_time = $hour.$min.$sec; ########################################################### my $dbh = DBI->connect("DBI:mysql:database=name;host=xxx.xxx.xxx.xxx","user", "pass") || die $DBI::errstr; ########################################################### my $ip=$ENV{'REMOTE_ADDR'};#определение ip адреса $date1=param('date1');#присвоение переменной первой даты из формы $date2=param('date2');#присвоение переменной второй даты из формы ########################################################### my $ID=$dbh->prepare("SELECT * FROM filter_ip WHERE IP_address='$ip'"); $ID->execute; my $viv=$ID->fetchrow_hashref(); my $id=$viv->{"Filter_ID"}; ########################################################### my $IB=$dbh->prepare("SELECT * FROM traffic WHERE ts BETWEEN '$date1' AND '$date2' AND filterid='$id'"); $IB->execute; my $iv=$IB->fetchrow_hashref(); my $summa=$iv->{"recv"}; ########################################################### $shotsumma=($summa/1024)/1024; $shotsumma=sprintf "%.3f",$shotsumma; ########################################################### ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst)=localtime(time); $hour="0".$hour if length($hour)==1; $min="0".$min if length($min)==1; $sec="0".$sec if length($sec)==1; $second_time = $hour.$min.$sec; $end_time = $second_time - $first_time; ########################################################### print "<html><head><title>Результат подсчета</title></head><body>"; print "<table align=center border=1>"; print "<tr><td><font size=4>За период с <b>$date1</b> по <b>$date2</b> скачано <b>$shotsumma</b> Мб (=$summa байт) </font></tr></td>"; print "<tr align=center><td><font size=4>Ваш IP адрес <b>$ip</b></font></td></tr>"; print "<tr align=center><td>Время выполнения запроса $end_time секунд</td></tr>"; print "</table>"; print "<table align=center border=0>"; print "<tr><td>"; print "<FORM ACTION='/cgi-bin/forma_traffic.pl' align=center>"; print "<INPUT TYPE=submit VALUE='Назад'>"; print "</tr></td>"; print "</table>"; print "</body></html>"; ########################################################### $dbh-> disconnect(); ########################################################### Ось на которой стоит MySQL NT4. |
| Автор: kronon 25.3.2003, 04:43 |
| Вряд ли это ускорит, просто бросилось в глаза: вместо print " html code "; print " html code "; ........................... print " html code "; лучше пиши для уменьшения кода print <<"abc"; html code ..... .... html code abc; # abc - любое сочетание букв ещё ты не забыл сделать индексы по используемым в запросах полям, особенно по датам? |
| Автор: forumuser 25.3.2003, 18:08 |
| Ну ка, ну ка, поподробнее по поводу индексов, может я ничего об этом не знаю! Что это такое? |
| Автор: HalkaR 31.3.2003, 07:23 |
| 1)Если это сервер, то возможно он перегружен и скрипт действительно тормозит. 2)Попробуй поставить dissconnect сразу после fetch 3)Ns грузишь весь! модуль CGI и не где им не пользуешься?! Не понял... |