Это быстрее, когда я использую имя индексированного столбца вместо *? Как это: ВЫБЕРИТЕ COUNT (id) FROMtablename
1
Лишь слегка. Я получил таблицу строк 21961904, которую его COUNT запросил за 115 секунд, в то время как использование идентификатора заняло 107 секунд.
Бондолин
2
COUNT (*) - это строгое определение языка. Вы получите ошибку разбора, если вы попытаетесь СЧИТАТЬ (*), обратите внимание на пробел
ppostma1
9
Вы можете сделать COUNT(1), это будет самый быстрый способ.
Шота Папиашвили
Каков наилучший способ использования COUNT () для записи переменной в PHP? Я делаю "... COUNT (*) AS rowCount ..." в SQL, использует ли он $ results-> num_rows, или есть способ вызвать этот результат напрямую?
Носадзимики
72
Потому что никто не упомянул об этом:
show table status;
перечисляет все таблицы вместе с некоторой дополнительной информацией, включая примерные строки для каждой таблицы. Это то, что phpMyAdmin использует для своей страницы базы данных.
Эта информация доступна в MySQL 4, вероятно, и в MySQL 3.23 - в течение долгого времени до базы данных с информационной схемой.
ОБНОВИТЬ:
Поскольку было проведено отрицательное голосование, я хочу уточнить, что показанное число рассчитано для InnoDB и TokuDB, и оно абсолютно верно для механизмов хранения MyISAM и Aria (Maria).
Количество рядов. Некоторые механизмы хранения, такие как MyISAM, хранят точное количество. Для других механизмов хранения, таких как InnoDB, это значение является приблизительным и может отличаться от фактического значения на целых 40-50%. В таких случаях используйте SELECT COUNT (*), чтобы получить точный счет.
Это также самый быстрый способ увидеть количество строк в MySQL, потому что запрос вроде:
select count(*)fromtable;
Выполнение полного сканирования таблицы, что может быть очень дорогой операцией, которая может занять часы на большом сервере с высокой нагрузкой. Это также увеличивает дисковый ввод-вывод.
Эта же операция может блокировать таблицу для вставок и обновлений - это происходит только на экзотических механизмах хранения.
InnoDB и TokuDB в порядке с блокировкой таблицы, но требуют полного сканирования таблицы.
Это выглядит как наиболее эффективный способ подсчета строк. Интересно, почему это не ответ? Я использую InnoDB. С блокировкой таблицы, количество строк должно быть точно верно?
Чунг Лунь Юэнь
для innodb это оценивается . но вы можете использовать его в некоторых случаях: «На нашем сайте есть участники xxx», «Мы обнаружили, что результаты xxx похожи на ваши» и так далее.
Ник
Я не уверена. но для Innodb это не реальный счет. Но это довольно полезно для миллионов таблиц строк.
Ник
4
Просматривать таблицы для подсчета каждой строки, чтобы получить количество строк, довольно смешно. Поэтому я предпочитаю и этот ответ.
th3penguinwhisperer
35
У нас есть другой способ узнать количество строк в таблице, не выполняя selectзапрос к этой таблице.
Каждый экземпляр MySQL имеет базу данных information_schema. Если вы выполните следующий запрос, он предоставит полную информацию о таблице, включая приблизительное количество строк в этой таблице.
select*from information_schema.TABLES where table_name ='table_name'\G
Если в вашей таблице несколько полей, а ваша таблица огромна, лучше НЕ ИСПОЛЬЗОВАТЬ,* так как она загружает все поля в память, а использование следующих параметров будет иметь более высокую производительность.
Это может вернуть приблизительное количество строк. В одном примере я получил 55 940 343 строки, используя COUNT (*), но 56 163 339, используя этот метод, поэтому он был отключен более чем на 200 000.
jcoffland
@jcoffland, я упомянул ответ _ Santosh_ выше, в котором говорится, что результат является приблизительным . Мой ответ - более подробный практический вопрос. Ответы совершенно ясны, если вы хотите использовать точный подсчет count(*)с пониманием производительности
Мохаммад Канан
1
$sql="SELECT count(*) as toplam FROM wp_postmeta WHERE meta_key='ICERIK' AND post_id=".$id;$total =0;$sqls = mysql_query($sql,$conn);if($sqls ){$total = mysql_result($sqls,0);};
echo "Total:".$total;`
tablename
COUNT(1)
, это будет самый быстрый способ.Потому что никто не упомянул об этом:
перечисляет все таблицы вместе с некоторой дополнительной информацией, включая примерные строки для каждой таблицы. Это то, что phpMyAdmin использует для своей страницы базы данных.
Эта информация доступна в MySQL 4, вероятно, и в MySQL 3.23 - в течение долгого времени до базы данных с информационной схемой.
ОБНОВИТЬ:
Поскольку было проведено отрицательное голосование, я хочу уточнить, что показанное число рассчитано для InnoDB и TokuDB, и оно абсолютно верно для механизмов хранения MyISAM и Aria (Maria).
Согласно документации :
Это также самый быстрый способ увидеть количество строк в MySQL, потому что запрос вроде:
Выполнение полного сканирования таблицы, что может быть очень дорогой операцией, которая может занять часы на большом сервере с высокой нагрузкой. Это также увеличивает дисковый ввод-вывод.
Эта же операция может блокировать таблицу для вставок и обновлений - это происходит только на экзотических механизмах хранения.
InnoDB и TokuDB в порядке с блокировкой таблицы, но требуют полного сканирования таблицы.
источник
У нас есть другой способ узнать количество строк в таблице, не выполняя
select
запрос к этой таблице.Каждый экземпляр MySQL имеет базу данных information_schema. Если вы выполните следующий запрос, он предоставит полную информацию о таблице, включая приблизительное количество строк в этой таблице.
источник
Просто:
источник
источник
Просто сделай
Вы можете указать условия с помощью Где после этого
источник
Если в вашей таблице несколько полей, а ваша таблица огромна, лучше НЕ ИСПОЛЬЗОВАТЬ,
*
так как она загружает все поля в память, а использование следующих параметров будет иметь более высокую производительность.источник
Как уже упоминал Сантош , я думаю, что этот запрос достаточно быстрый, не запрашивая всю таблицу.
Чтобы вернуть целочисленный результат числа записей данных для определенного имени таблицы в конкретной базе данных :
источник
count(*)
с пониманием производительностиисточник
Вы должны использовать count () возвращает количество строк, которое соответствует заданным критериям
источник
Если у вас есть первичный ключ или уникальный ключ / индекс, возможен более быстрый метод (протестировано с 4 миллионами таблиц строк)
а затем получить поле мощности (оно близко к мгновенному)
Время от 0,4 до 0,0001 мс
источник