|
|
|
| очень мне уж не нравиться что некоторые функции много жрут на мой взгляд самые проблемные это функции по работе с базой данных может кто поделиться опытом техники построения очень хрошо оптимезированным кодом
p.s только не sql запросов про них итак все понятно!!! | |
|
|
|
|
|
|
|
для: серый
(06.04.2012 в 14:57)
| | судя по вопросу вам "про них" (про sql запросы) совсем ничего не понятно
сами по себе функции по работе с БД, если речь конечно о стандартных функциях РНР, оптимизированы дальше некуда, да и оптимизировать там собственно говоря нечего, так как большинство из них просто отдают результат
ну а если непреодолимое желание оптимизировать не покидает вас, то вам нужно записаться в команду разработчиков РНР | |
|
|
|
|
|
|
|
для: Valick
(06.04.2012 в 17:55)
| | я далеко не профи наоборот только начал учить пхп так что среди разработчиков мне делать не чего на форуме зарегистрировался потму что в книгах бывает фига а вот советы людей послушать очень и очень полезно да и сам я судовольствием поделюсь каким небудь советом
меня беспокоит то что при использование базы данных приложение работает медлиней чем при файловой системе однако без базы не как !!!
так как я новичек то я извлекаю данные в цикле
например так
<?
$db = mysql_connect("localhost","root","");
mysql_query("SET NAMES 'cp1251'");
mysql_select_db('test',$db);
$result = mysql_query("SELECT test FROM test");
$myrow = mysql_fetch_array($result);
do
{
echo $myrow['test'];
}
while ($myrow = mysql_fetch_array($result) );
?>
|
при таком коде работает медленно подскажите пожалуйста что тут не так | |
|
|
|
|
|
|
|
для: серый
(06.04.2012 в 19:09)
| | Вы время обработки ресурса замеряли, время непосредственно выполнения самого запроса к базе? С чем вы сравниваете?
Не так у вас два момента:
1) функция do while в этом случае совсем не к месту, следует использовать while. О разнице этих функций почитайте в учебнике.
2) не к месту применение функции, которой вы получаете строку ресурса - mysql_fetch_array. Кроме нее существуют еще две - mysql_fetch_assoc и mysql_fetch_row. Той, которой вы пользуетесь, по умолчанию возвращает массив данных как два массива, один из которых ассоциативный, а второй индексный. Вы используете, при непосредственно оперировании самими данными, только ассоциативный. Другими словами, вы впустую расходуете и время, и ресурсы. Для такого простого запроса и набора данных как у вас, это конечно мелочь, а вот при большом объеме данных, уже рубль.
Все три функции описаны в мануале, ознакомтесь с ними. | |
|
|
|
|
|
|
|
для: confirm
(06.04.2012 в 19:53)
| | огромное вам спасибо за отзыв сегодня прoтестирую ваше предложение | |
|
|
|
|
|
|
|
для: confirm
(06.04.2012 в 19:53)
| | какя конструкция по вашему более оправдана
вот эта
$result = mysql_query("SELECT test FROM test") or die('здесь или свой текст или вывод ошибки бд');
|
или вот эта
$result = mysql_query("SELECT test FROM test") ;
if(mysql_num_rows($result )>0);
|
зарание спосибо! | |
|
|
|
|
|
|
|
для: серый
(06.04.2012 в 21:35)
| | Ну если учесть, что вторая "конструкция" не закончена, то такая вообще не имеет право на существование. Но если это намеренное сокращение ради вопроса, то вы понимаете какая разница между ними? | |
|
|
|
|
|
|
|
для: confirm
(06.04.2012 в 21:45)
| | это для сокрощения вопроса
а разница в то что первый вориант в случае отрицательного результата остановливает всю
программу второйже обходит участок кода или может нечего не делать
p.sтак как я новичек ямогу ошибаться | |
|
|
|
|
|
|
|
для: серый
(06.04.2012 в 21:51)
| | die (псевдоним функции exit) - выводит сообщение и прекращает выполнение текущего скрипта (а это не программа в прямом понимании), и у вас это определяет результат запроса к базе.
А вторая предполагает действие в случае, если запрос вернет хотя бы один ряд, в противном случае нет.
Вопрос - это равнозначные по логике действия? | |
|
|
|
|
|
|
|
для: confirm
(06.04.2012 в 21:57)
| | ну в том что они оба отлавливают ошибки -они одинаковы
а вот не всигда нужно остонавливать скрипт тут второй вориант подойдет больше | |
|
|
|
|
|
|
|
для: серый
(06.04.2012 в 22:13)
| | Это каким образом второе отлавливает ошибки? | |
|
|
|
|
|
|
|
для: confirm
(06.04.2012 в 22:14)
| | ну если второй будет отрицательным значит мы пропускаем код где обрабатываються даные из бд
иначе повылетают ошибки хотя можно сабакой воспользываться но лутче собак не трогать | |
|
|
|
|
|
|
|
для: серый
(06.04.2012 в 22:21)
| | Отрицательный ответ, это не обязательно ошибка. У вас может просто не быть запрашиваемых данных в таблице, или вообще она пуста, поэтому и не получите ничего. В этом случае с таким же успехом можно проверить if($result), не прибегая к проверке количества рядов.
А если вы имеете ввиду возможные ваши ошибки синтаксиса, и именно сообщения mysql об ошибках, то первое как раз и предполагает их выдачу, если например так:
$result = mysql_query("SELECT test FROM test") or die(mysql_error());
| Вот этот результат и анализируйте, чтобы узнать где вы накосячили. | |
|
|
|
|
|
|
|
для: confirm
(06.04.2012 в 22:31)
| |
$result = mysql_query("SELECT test FROM test") or exit (mysql_error());
|
а вот так лутче будет или нет? | |
|
|
|
|
|
|
|
для: серый
(06.04.2012 в 23:57)
| | Чем? die, как я вам уже писал, это псевдоним функции exit(), другими словами это одно и тоже.
Вы учитесь, значит php-мануал должен стать вашей настольной (надисплейной) книгой. Заглядывайте в него почаще. | |
|
|
|
|
|
|
|
для: confirm
(07.04.2012 в 07:25)
| |
<?
function gettime(){
$start_time = explode(' ',microtime());
$real_time = $start_time[1].substr($start_time[0],1);
return $real_time;
}
$start_time = gettime();
//здесь код
$stop_time = gettime();
$diff_time = bcsub($stop_time,$start_time,6);
echo $diff_time.'<br/>';
?>
|
это правельный замер или ошибочный заранее спосибо за ответ | |
|
|
|
|
|
|
|
для: серый
(06.04.2012 в 14:57)
| | А можно спросить какие функции у вас вызывают возмущение? | |
|
|
|
|
|
|
|
для: Роккер Руслан
(06.04.2012 в 18:14)
| | может я новерное что то не так понял в учебнике написано что само обращение к базе очень накладно на ресурсы -значит и функции обращения к базе в том числе. | |
|
|
|
|
|
|
|
для: серый
(06.04.2012 в 19:31)
| | что само обращение к базе очень накладно
читайте внимательнее...
не обращение к БД, а установка соединения с БД
как бы вам не хотелось, но это разные понятия
от установки соединения вам ничем не избавиться, разве что отказаться от БД совсем
__
и кстати о каком учебнике идет речь? если о видеокурсе Попова, то это "ученье" достойное инквизиции | |
|
|
|
|
|
|
|
для: Valick
(06.04.2012 в 20:02)
| | а при кождом запросе к бд в скрепте происходит соединения? | |
|
|
|
|
|
|
|
для: серый
(06.04.2012 в 20:10)
| | если так, то это грубейшая логическая ошибка
соединение должно устанавливаться один раз на "страницу"
и желательно после выполнения запросов к БД связь с ней разорвать, а не дожидаться окончания выполнения скрипта | |
|
|
|
|
|
|
|
для: Valick
(06.04.2012 в 20:20)
| |
<?
//начоло соединения
$db = mysql_connect("localhost","root","");
mysql_query("SET NAMES 'cp1251'");
mysql_select_db('test',$db);
//обращение к бд
$result = mysql_query("SELECT test FROM test");
$myrow = mysql_fetch_array($result);
do
{
echo $myrow['test'];
}
while ($myrow = mysql_fetch_array($result) );
//закрытие соединеня с бд
mysql_close($db);
?>
|
так вы имели в виду? | |
|
|
|
|
|
|
|
для: серый
(06.04.2012 в 20:31)
| |
<?php
//начоло соединения
$db = mysql_connect("localhost","root","");
mysql_query("SET NAMES 'cp1251'");
mysql_select_db('test',$db);
//обращение к бд
$result = mysql_query("SELECT test FROM test");
while ($myrow = mysql_fetch_assoc($result)){
echo $myrow['test'];
}
//закрытие соединеня с бд
mysql_close($db);
?>
|
| |
|
|
|
|
|
|
|
для: Valick
(06.04.2012 в 21:24)
| | спасибо за ответ мне уже двое сказали про цикл и про то что
mysql_fetch_assoc(); лутсше чем mysql_fetch_array();
|
| |
|
|
|
|
|
|
|
для: серый
(06.04.2012 в 21:43)
| | Она не лучше, вы и mysql_fetch_array можете использовать, но тогда хотя бы указывайте необходимый вам тип, чтобы не получать попутно мусор, а делается это вторым аргументом этой функции. Вы прочтите о них, а не выбирайте их потому, что вам так сказали. | |
|
|
|
|
|
|
|
для: confirm
(06.04.2012 в 21:48)
| | вы несколько сгущаете краски...
это юношеский максимализм или старческий маразм? :) | |
|
|
|
|
|
|
|
для: Valick
(06.04.2012 в 21:56)
| | Я говорю то, что думаю и считаю нужным. | |
|
|
|
|
|
|
|
для: Valick
(06.04.2012 в 21:56)
| | честно говоря не знаю максимализм или старческий маразм просто мне все очень интересно!!! | |
|
|
|
|
|
|
|
для: confirm
(06.04.2012 в 21:48)
| | а если типы разные но их надо вывести например в сылке где якорь строковой тип а втребут передать числовой как обычно id | |
|
|
|
|
|
|
|
для: серый
(06.04.2012 в 21:56)
| | Причем тут числовой id? Я не говорю о типах данных вашей таблицы, я говорю о типе возвращаемого массива. Вы прочли об этой функции? | |
|
|
|
|
|
|
|
для: confirm
(06.04.2012 в 22:00)
| | извените просто вопрос не сразу понил | |
|
|
|
|
|
|
|
для: серый
(06.04.2012 в 14:57)
| | Выбросьте это из головы. Когда (и если) вы доберётесь до разработки высоконагруженных приложений, вы сами половину поймёте, а половину спросите иначе. А пока, повторю, выбросьте это из головы. | |
|
|
|
|
|
|
|
для: Киналь
(06.04.2012 в 19:45)
| | приложение уже почти готово так как там будет много аякс запросов (для удобства пользователей ) потому и интересуюсь. как говориться осведомлен-значит вооружон ! | |
|
|
|
|
|
|
|
для: серый
(06.04.2012 в 19:55)
| | всем доброго дня !!!
продолжая вчерашию тему хочу спросить
<?
function gettime(){
$start_time = explode(' ',microtime());
$real_time = $start_time[1].substr($start_time[0],1);
return $real_time;
}
$start_time = gettime();
//здесь код
$stop_time = gettime();
$diff_time = bcsub($stop_time,$start_time,6);
echo $diff_time.'<br/>';
?>
|
это правельный замер или ошибочный заранее спосибо кто ответит | |
|
|
|