Intereting Posts
Должен ли я освобождать mysql-результат после его хранения? Проверить хэш, сгенерированный с помощью php crypt () в NodeJS? Самый эффективный способ сделать языковой файл в PHP? Синтаксис синтаксиса PHP-массива Ошибка анализа левой квадратной скобки " Вывод var_dump / print_r в PHP искажен – проблема с кодировкой? Расширение ключа RijndaelManaged.CreateEncryptor Динамический модуль по умолчанию в Zend Framework Эффективный алгоритм генерации расписания SQL Как получить подмножество массива $ _POST с ключами, начинающимися с префикса Symfony Предупреждение: SessionHandler :: read (/ Applications / XAMPP / xamppfiles / temp / …): open failed Permission denied Замените все между двумя символами, включая регулярное выражение в php Как сделать запрос на отправку https в CakePHP Почему точка с запятой необязательна в последнем утверждении в php? MySQL Заказ по индексу id из отдельной таблицы Как установить мыло атрибута mustUnderstand в php?

Каков наилучший способ получить общее количество записей в таблице mysql с php?

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

$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)