Выборка данных из базы проискходит то- медленно , то - быстро ...

nnn21

Новичок
Выборка данных из базы проискходит то- медленно , то - быстро ...

Итак ...
Есть скрипт, который выводит список публикаций, за вывод публикаций с прикрепленными файлами отвечает функция
function show_preprint_info1

задумывался изначально постраничный вывод, потому, что публикаций очень много и на одной странице выводить их будет очень ... долго .

<?

function show_preprint_info1 ($article_row,$year,$id_article) // вывод данных
$file_result=mysql_query("SELECT * FROM file WHERE id_article=$article_row[id]");
if(@$file_row=mysql_fetch_array($file_result))


$num_limith="5"; // количество результатов на страницу



$result1 = mysql_query("SELECT number FROM article WHERE year=$year ORDER BY number"); //
$num_rows = mysql_num_rows($result1); // вычисляем количество строк в базе



$article_result=mysql_query("SELECT id, number , title, body FROM article WHERE year=$year ORDER BY number LIMIT $num_limith");

if ($num_rows<=5)
{

while($article_row=mysql_fetch_array($article_result))
show_preprint_info1($article_row,$year,$id_article);


}
else
{

// получаем номер страницы

if (isset($_GET['page'])) $page=($_GET['page']-1);

else
$page=0;

// вычисляем первый оператор для LIMIT

$start=abs($page*$num_limith);


// составляем запрос и выводим записи
// $start - присваивает номер записи


$res=mysql_query("SELECT id, number , title, body FROM article WHERE year=$year ORDER BY number LIMIT $start,$num_limith");
// while($row=mysql_fetch_array($res))
//
{
while($article_row=mysql_fetch_array($res))
show_preprint_info1($article_row,$year,$id_article);

}


}

// выводим ссылки на страницы, так как у нас подразумевается постраничный вывод

$q="SELECT count(*) FROM article WHERE year=$year";
$res=mysql_query($q);
$row=mysql_fetch_row($res);
$num_rows=$row[0];
$num_pages=ceil($num_rows/$num_limith); // $num_pages - количество получившихся страниц

?>


Непонятно почему скрипт работает по разному, быстро или медленно .. Через клиент MySQL CC , запрос работает быстро, а вот на сайте, нифига непонятно почему - медленно =(

Может быть сервер перегружен ? ЧТо делать, если дело в сервере, ведь понятно, что начальству не объяснишь - неработает потому что типа у вас оборудование слабое ...
 

Mr_Max

Первый класс. Зимние каникулы ^_^
Команда форума
ЧТо делать, если дело в сервере, ведь понятно, что начальству не объяснишь - неработает потому что типа у вас оборудование слабое ...
Начальству показать Explain запросов

2. Попробуйте Ваш вопрос оформить по-человечески
 

Wicked

Новичок
1) что значит "быстро" и "медленно"? ты на глаз измеряешь что ли? где замеры времени работы каждого из приведенных запросов?
2) он работает то "быстро", то "медленно" при одних и тех же условиях?
3) ты читал правила форума? :)
 

Alexandre

PHPПенсионер
посмотреть при каких топах (значение команды top, uptime) работает быстро, а при каких медленно
если топы разные, то это влияет загрузка сервера...

время отклика распределяется следующим образом:
- вермя пути запроса по трафику
- время обработки запроса WEB сервером
- время выполнения PHP скрипта
- время выполнения запроса к БД

при желании все можно отпрофилировать и найти слабое звено.
замерь работу скрипта утилитой ab, Посмотри топы...
 

Gas

может по одной?
$result1 = mysql_query("SELECT number FROM article WHERE year=$year ORDER BY number"); //
$num_rows = mysql_num_rows($result1); // вычисляем количество строк в базе
чтоб получить количество - нужно выполнить запрос, который вернёт количество, а не все записи таблицы.

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

3) ты читал правила форума?
я сам их никогда не читал :)
 

nnn21

Новичок
При попытке протестировать скрит на скорость утилитой ab

/content.php?ask=true&year=2003 - скрипт который тормозит уже сильно , так как количество записей за 2003 год у нас уже несколько десятков

следующее я получил на выходе
----------------------------------------------------

document path /content.php?ask=true
doc lenght 7638 bytes

time taken for tests: 0.203 seconds
Requests per seconds: 49.26

transfer rate: 388.52 kb/s

year - не является внутренней или внешней командой

----------------------------------------------------

кстати коллеги по цеху сказали, что возможно дело в загрузке mysql и что - то редактировать в скриптах не имеет смысла ... Так ли это ? Если так, неужели никаких способов по оптимизации нет ?
 

Gas

может по одной?
способы оптимизации есть почти всегда, от нас то что ты хочешь - чтоб мы телепатически изучили код и сказали в чём дело?

кстати параметр &year=2003 не передался твоему скрипту при тестировании.
 

nnn21

Новичок
2 Gas
да, &year=2003 не передается, а как же тогда можно будет отследить скорость работы скрипта ?
/content.php?ask=true - без проблем , все молниеносно

2Mr_Max нет никто не догадался смотреть explain запросов .. Сейчас штудирую


---------

Скорость выполнения выборки из таблицы FILE - 13 секунд , 93 строкчки ... 23250кб
Почитал на форумах, поспрашивал и мне сказали, что сам по себе такой вариант вывода информации неправильный. А у меня некоторые к некоторым article прикреплены файлы pdf, которые тож весят не по байту

Получается, что при каждом переходе на страницу у нас идет подсчет этих файлов, что безусловно приводит к жутким тормозам. В среднем, каждый файл весит 250кб

Порекомендовали сделать так, чтобы был некий скрипт отображающий
1) наличие прикрепленного файла
2) в случае наличия этого файла, сделать ссылку на него .... и только в этом случае передавать эти 250кб

---

как замутить соображения есть, но незнаю как по -хорошему надо
 
Сверху