Количество строк таблицы


167

Что такое команда MySQL для получения количества записей в таблице?

Ответы:


238
SELECT COUNT(*) FROM fooTable;

будет считать количество строк в таблице.

Смотрите справочное руководство .


7
Это быстрее, когда я использую имя индексированного столбца вместо *? Как это: ВЫБЕРИТЕ 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(*) from table;

Выполнение полного сканирования таблицы, что может быть очень дорогой операцией, которая может занять часы на большом сервере с высокой нагрузкой. Это также увеличивает дисковый ввод-вывод.

Эта же операция может блокировать таблицу для вставок и обновлений - это происходит только на экзотических механизмах хранения.

InnoDB и TokuDB в порядке с блокировкой таблицы, но требуют полного сканирования таблицы.


3
Это выглядит как наиболее эффективный способ подсчета строк. Интересно, почему это не ответ? Я использую InnoDB. С блокировкой таблицы, количество строк должно быть точно верно?
Чунг Лунь Юэнь

для innodb это оценивается . но вы можете использовать его в некоторых случаях: «На нашем сайте есть участники xxx», «Мы обнаружили, что результаты xxx похожи на ваши» и так далее.
Ник

Я не уверена. но для Innodb это не реальный счет. Но это довольно полезно для миллионов таблиц строк.
Ник

4
Просматривать таблицы для подсчета каждой строки, чтобы получить количество строк, довольно смешно. Поэтому я предпочитаю и этот ответ.
th3penguinwhisperer

35

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

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

select * from information_schema.TABLES where table_name = 'table_name'\G

Это также быстрее для таблицы MyISAM, поскольку MyISAM хранит количество строк?
NaturalBornCamper

Я никогда не проверял это на MyISAM.
Сантош Тангуду



3

Просто сделай

SELECT COUNT(*) FROM table;

Вы можете указать условия с помощью Где после этого

SELECT COUNT(*) FROM table WHERE eye_color='brown';

3

Если в вашей таблице несколько полей, а ваша таблица огромна, лучше НЕ ИСПОЛЬЗОВАТЬ, * так как она загружает все поля в память, а использование следующих параметров будет иметь более высокую производительность.

SELECT COUNT(1) FROM fooTable;

Это неверно См. Stackoverflow.com/questions/5179969/… COUNT (1) на самом деле может быть намного медленнее для MyISAM.
jcoffland

@jcoffland вы можете попробовать t самостоятельно, особенно если у вас есть соединение или когда условия будут намного быстрее, чем считать (*).
Юсефери

2

Как уже упоминал Сантош , я думаю, что этот запрос достаточно быстрый, не запрашивая всю таблицу.

Чтобы вернуть целочисленный результат числа записей данных для определенного имени таблицы в конкретной базе данных :

select TABLE_ROWS from information_schema.TABLES where TABLE_SCHEMA = 'database' 
AND table_name='tablename';

1
Это может вернуть приблизительное количество строк. В одном примере я получил 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;`

Этот ответ устарел, mysql_result устарел в PHP 5.5.0 и удален в PHP 7.0.0
Сделайте этот мир лучше

1

Вы должны использовать count () возвращает количество строк, которое соответствует заданным критериям

select count(*) from table_name;

0

Если у вас есть первичный ключ или уникальный ключ / индекс, возможен более быстрый метод (протестировано с 4 миллионами таблиц строк)

SHOW INDEXES FROM "database.tablename" WHERE Key_Name=\"PRIMARY\"

а затем получить поле мощности (оно близко к мгновенному)

Время от 0,4 до 0,0001 мс

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.