Использование count (*) vs num_rows

Чтобы получить количество строк в наборе результатов, существует два способа:

  1. Использовать запрос для подсчета

    $query="Select count(*) as count from some_table where type='t1'";

    а затем получить значение счетчика.

  2. Получает счет через num_rows (), в php.

так какой из них лучше?

Если ваша цель – фактически подсчитать строки, используйте COUNT(*) . num_rows (по моему опыту) используется только для подтверждения того, что в этом случае было возвращено больше, чем нулевые строки, и продолжить. Вероятно, MySQL займет больше времени для чтения многих выбранных строк по сравнению с агрегацией по COUNT даже если сам запрос занимает такое же количество времени.

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

Между ними есть несколько отличий:

  1. num_rows – количество полученных строк результатов (записей).
  2. count(*) – количество записей в базе данных, соответствующей запросу.

База данных может быть настроена на ограничение количества возвращаемых результатов (например, MySQL это позволяет), и в этом случае два могут отличаться по значению, если предел ниже, чем количество совпадающих записей. Обратите внимание, что ограничения могут быть сконфигурированы администратором базы данных, поэтому, возможно, не совсем очевидно, из кода SQL-запроса, какие ограничения применяются.

Использование num_rows для подсчета записей подразумевает «передачу» каждой записи, поэтому, если вам нужно только общее число (которое будет одной записью / строкой), вам гораздо лучше получить count .

Кроме того, count может использоваться в более сложных сценариях запросов, чтобы делать такие вещи, как num_rows , что нелегко сделать с помощью num_rows .

Это зависит от вашей реализации. Если вы имеете дело с большим количеством строк, count (*) лучше, потому что ему не нужно передавать все эти строки в PHP. Если, с другой стороны, вы имеете дело с небольшим количеством строк, разница незначительна.

num_rows() было бы лучше, если бы у вас было небольшое количество строк, а count(*) даст вам производительность, если есть большое количество строк, и вам нужно выбрать один и отправить его на php.