Каков наиболее эффективный способ выбора общего количества записей из большой таблицы? В настоящее время я просто делаю
$result = mysql_query("SELECT id FROM table"); $total = mysql_num_rows($result)
Мне сказали, что это не очень эффективно или быстро, если у вас много записей в таблице.
Тебе сказали правильно. mysql может сделать это для вас, что намного эффективнее.
$result = mysql_query( "select count(id) as num_rows from table" ); $row = mysql_fetch_object( $result ); $total = $row->num_rows;
Вы должны использовать встроенную функцию COUNT SQL :
$result = mysql_query("SELECT COUNT(id) FROM table");
Таблицы MyISAM уже хранят количество строк
SELECT COUNT(*) FROM table
на таблице MyISAM просто читает это значение. Он не сканирует таблицу или индекс (ы). Таким образом, это так же быстро или быстро, как чтение значения из другой таблицы.
Согласно документации MySQL это наиболее эффективно, если вы используете таблицу MyISAM (которая является наиболее обычным типом используемых таблиц):
$result = mysql_query("SELECT COUNT(*) FROM table");
В противном случае вы должны сделать, как сказал Уэйн, и убедитесь, что подсчитанная колонка индексирована.
Могу ли я добавить, что наиболее «эффективным» способом получения общего количества записей, особенно в большой таблице, является сохранение общей суммы в виде числа в другой таблице. Таким образом, вам не нужно запрашивать всю таблицу каждый раз, когда вы хотите получить общее количество.
Тем не менее, вам нужно настроить код или триггеры в базе данных, чтобы увеличить или уменьшить этот номер при добавлении / удалении строки.
Таким образом, это не самый простой способ, но если ваш сайт растет, вам обязательно стоит подумать об этом.
Несмотря на то, что я согласен использовать встроенные функции, я не вижу разницы в производительности между mysql_num_rows и count (id). Для 25000 результатов, такая же производительность (можно сказать точную.) Только для записи.
Что-то вроде этого:
$result = mysql_query("SELECT COUNT(id) AS total_things from table"); $row = mysql_fetch_array($result,MYSQL_ASSOC); $num_results = $row["total_things"];
Просто хочу отметить, что SHOW TABLE STATUS
возвращает столбец Rows
, хотя я не могу говорить о его эффективности. Некоторое легкое Googling показывает сообщения о медлительности в MySQL 4 более двух лет назад. Могут сделать интересные испытания времени.
Также обратите внимание на предостережение InnoDB относительно неточностей.
Используйте агрегатную функцию. Попробуйте следующую команду SQL
$num= mysql_query("SELECT COUNT(id) FROM $table");
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' = дескриптор подключенного db)