Что быстрее? - PullRequest
       23

Что быстрее?

1 голос
/ 20 декабря 2010

Сегодня я беседовал с другом об увеличении времени загрузки страниц, и он упомянул мне, что «mysql_num_rows» устарел и занимает много времени.

Будет ли mysql_num_rows заменен кодом нижеБыть быстрее?

$query      =   mysql_query("SELECT COUNT(*) FROM sent_messages WHERE  from_sender = '".$_SESSION['id']."'") or die(mysql_error()); 
$result     =   mysql_fetch_array($query);
$count      =   $result['COUNT(*)'];

Я не знаю слишком много о сложности времени и алгоритмах, поэтому любые советы будут с благодарностью.

Спасибо

Ответы [ 2 ]

4 голосов
/ 20 декабря 2010

mysql_num_rows () не старый, но он медленнее, поскольку требует передачи большего количества данных между клиентом и базой данных.mysql_num_rows () незаменим, если вам нужно прочитать данные и посчитать их.Я рекомендую этот способ, если вам нужно только количество записей:

$query  = mysql_query("SELECT COUNT(*) FROM sent_messages WHERE  from_sender = '".$_SESSION['id']."'") or die(mysql_error());
$count  = mysql_result($query,0);
2 голосов
/ 20 декабря 2010

Māris Kiseļovs ' answer покрывает землю здесь. Однако я просто хочу добавить следующее, чтобы избежать путаницы:

В общем , попытайтесь выполнить как можно больше работы в БД / запросе. То есть, не выбирайте много данных только для выполнения вычислений и преобразования в PHP (или любом другом языке). Всегда старайтесь запрашивать только то, что вам нужно, из БД, тем самым сводя к минимуму обмен данными.

В этом конкретном случае вам будет лучше с подходами COUNT(*) и mysql_result(); выполнение вычислений на уровне БД, запрашивая только необходимые данные (количество записей).

Однако, , если вы тоже перечислите записи (т. Е. Представив счетчик и итерируя по множеству записей), вы просто должны сделать нормальный SELECT ... FROM ... для извлечения записи (для того, чтобы сгенерировать список) и сделать mysql_num_rows() на этом наборе результатов (чтобы получить количество). В этом случае не будет никакого выигрыша в отдельном запросе SELECT COUNT(*) ..., так как вам все равно нужен полный набор результатов из БД.

...