Что лучше: "select count(id)" или "mysql_num_rows($res)"

Что лучше: "select count(id)" или "mysql_num_rows($res)"

Вот возник глупый вопрос...

Что лучше:
PHP:
$res   = mysql_query('select count(id) as count from ... ');
$data = mysql_fetch_assoc($res);

echo $data['count'];
или

PHP:
$res   = mysql_query('select id from ... ');
$data = mysql_num_rows($res);

echo $data;
имхо, первый вариант будет работать быстрее, а второй - удобне....
 
Бресь Сергей
собственно, все равно...

Фанат
пасибо. т.е. никакой разницы в производительности нет?
 

Сергей123

Новичок
Ну как всё равно...
Если идёт, например, проверка авторизации, то почти наверняка удобно сразу поднять данные об успешно авторизированном пользователе (т.е. безальтернативный 2 вариант).
 

Фанат

oncle terrible
Команда форума
Loshadka, поясни мне, пожалуйста, логическую цепочку, посредством которой ты вывел из вопроса "чем удобнее?" утверждение "разницы в производительности нет"
очень интересно.
 
Фанат сорри, просмотрел у тебя в ответе знак "?".


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

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

Фанат

oncle terrible
Команда форума
и что - самостоятельно ответить на него не можешь?
 
измерять скорость - банально. больше чем уверен - разница будет минимальной...

могу: как я сам считаю, первый вариант - быстрее, т.к. БД в одном запросе все считат, а потом просто забираем результат.

а вдруг я ощшибаюсь?
 

Junkers

Новичок
Вклинюсь в тему:

Вот у меня такой запрос:

PHP:
SELECT * FROM `table` WHERE `column1` LIKE '%var1%' OR `column1` LIKE '%var2%'
Куда, пардон, вставить COUNT() так, чтобы не прибегать к mysql_num_rows() и чтобы запрос выполнялся один раз?
 

crocodile2u

http://vbolshov.org.ru
Junkers
Научись спрашивать человеским языком, плз. Иначе ответ таков:

COUNT() можно вставлять мноого где, а запрос выполнится один раз, если ты его пошлешь один раз.
 

Junkers

Новичок
crocodile2u, сорри за косноязычность. Хотел сказать вот что:

Приведенный запрос выводит мне все соответствующие условию строки. Мне же нужно вдобавок узнать количество найденных полей. Если сделать так, как советовал
Loshadka, то запрос выводит только количество найденных строк. На сайте вычитал, что mysql_num_rows() заметно тормозит.

Вот вопрос: где вставить COUNT() так, чтобы запрос выводил и найденные поля и их количество одновременно. Подозреваю, что это нереально...
 

Junkers

Новичок
SelenIT, на этом сайте, в статье "Безопасный и удобный поиск в MySQL".

Вот цитата

лучше подсчитать количество строк сразу в запросе — COUNT(*), а не через функцию php mysql_num_rows(). Можете проверить на больших таблицах
 

SelenIT

IT-лунатик :)
Junkers

В статье подразумевается, что общее число найденных результатов и число выводимых строк различны (раз упомянут постраничный вывод). Поэтому выбор общего числа отдельным, притом очень быстрым, запросом, тут практически без вариантов. И вообще, если нужно только посчитать какие-то записи, лучше считать их прямо в базе.

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

Аргентум

Новичок
Автор оригинала: Loshadka
измерять скорость - банально. больше чем уверен - разница будет минимальной...

могу: как я сам считаю, первый вариант - быстрее, т.к. БД в одном запросе все считат, а потом просто забираем результат.

а вдруг я ощшибаюсь?
Хочу тебя обломать:) Для начала циклом забей в базюку какие-нибудь тестовые данные в кол-ве 1000000 записей, затем выбирай первым и вторым способом, разница как раз и будет далекоооо.. не минимальной
 

Falc

Новичок
> (а то и счетчика прямо в цикле вывода)
Ну это уж совсем коряво.

Сама функция mysql_num_rows() не тормозит, тормозит выборка которая предшествует mysql_num_rows. Поэтому как сказал SelenIT если данные в PHP вытаскивать не надо то надо считать через COUNT(*) ( а не COUNT(id) для пояснения см. статью по ссылке выше )
 
Сверху