Каков наилучший способ получить общее количество записей в таблице MySQL с php? - PullRequest
8 голосов
/ 22 сентября 2008

Какой самый эффективный способ выбрать общее количество записей из большой таблицы? В настоящее время я просто делаю

$result = mysql_query("SELECT id FROM table");
$total = mysql_num_rows($result)

Мне сказали, что это не очень эффективно или быстро, если в таблице много записей.

Ответы [ 10 ]

28 голосов
/ 22 сентября 2008

Вам сказали правильно. MySQL может сделать это для вас, что гораздо эффективнее.

$result = mysql_query( "select count(id) as num_rows from table" );
$row = mysql_fetch_object( $result );
$total = $row->num_rows;
4 голосов
/ 22 сентября 2008

Вы должны использовать Встроенную в SQL функцию COUNT :

$result = mysql_query("SELECT COUNT(id) FROM table");
3 голосов
/ 23 сентября 2008

В таблицах MyISAM уже хранится количество строк

SELECT COUNT(*) FROM table

в таблице MyISAM просто считывает это значение. Он не сканирует таблицу или индекс (ы). Таким образом, это так же быстро или быстро, как чтение значения из другой таблицы.

2 голосов
/ 22 сентября 2008

Согласно документации MySQL это наиболее эффективно, если вы используете таблицу MyISAM (которая является наиболее распространенным типом используемых таблиц):

$result = mysql_query("SELECT COUNT(*) FROM table");

В противном случае вы должны поступить так, как сказал Уэйн, и быть уверенным, что подсчитанный столбец проиндексирован.

1 голос
/ 02 июня 2012

Несмотря на то, что я согласен использовать встроенные функции, я не вижу никакой разницы в производительности между mysql_num_rows и count (id). Для 25000 результатов такая же производительность (можно сказать точно). Только для записи.

1 голос
/ 22 сентября 2008

Могу ли я просто добавить, что самый «эффективный» способ получения общего количества записей, особенно в большой таблице, - это сохранение общей суммы как числа в другой таблице. Таким образом, вам не нужно запрашивать всю таблицу каждый раз, когда вы хотите получить ее.

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

Так что это не самый простой способ, но если ваш сайт растет, вам определенно стоит подумать об этом.

0 голосов
/ 02 мая 2017

mysqli_query () устарела. Лучше использовать это:

$result = $dbh->query("SELECT id FROM {table_name}");
$total = $result->num_rows;

Использование PDO:

$result = $dbh->query("SELECT id FROM {table_name}");
$total = $result->rowCount();

(где '$ dbh' = дескриптор подключенной к БД)

0 голосов
/ 13 января 2016

Использовать агрегатную функцию. Попробуйте следующую команду SQL

$num= mysql_query("SELECT COUNT(id) FROM $table");
0 голосов
/ 09 октября 2008

Просто хотел заметить, что SHOW TABLE STATUS возвращает столбец Rows, хотя я не могу говорить о его эффективности. Некоторый легкий поиск в Google выдает сообщения о медлительности в MySQL 4 более двух лет назад. Мог бы сделать для интересных испытаний времени.

Также обратите внимание на предостережение InnoDB относительно неточных подсчетов.

0 голосов
/ 22 сентября 2008

Что-то вроде этого:

$result = mysql_query("SELECT COUNT(id) AS total_things from table");
$row = mysql_fetch_array($result,MYSQL_ASSOC);
$num_results = $row["total_things"];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...