MySQL получает количество строк в таблице innodb - PullRequest
9 голосов
/ 25 февраля 2011

У меня есть таблица с использованием innodb. Я знаю, что в таблице примерно 89 миллионов строк. Использование

SELECT COUNT(*) FROM table;

занимает около пяти минут, чтобы бежать. Я знаю, что innodb не оптимизирован для безусловных запросов COUNT (*). Как я могу реструктурировать запрос, чтобы ускорить подсчет? Будет ли просто добавление WHERE 1 = 1 работать, или мне нужно запросить определенное поле?

Я знаю, что я могу получить приблизительное количество строк, используя SHOW TABLE STATUS, но я хочу получить значение в PHP-скрипте, и кажется, что с помощью этого метода можно многое понять.

Ответы [ 4 ]

20 голосов
/ 26 февраля 2011

Если вы в порядке с приблизительным числом и просто не хотите связываться с запуском SHOW TABLE STATUS из PHP, вы можете использовать информационную БД:

SELECT TABLE_ROWS FROM information_schema.tables
WHERE TABLE_SCHEMA = 'my_db_name' 
AND TABLE_NAME = 'my_table_name';
6 голосов
/ 26 февраля 2011

Если вы согласны с приблизительным числом записей, вы можете использовать вывод "explain".

Упрощенная версия кода

$result = mysql_query('explain SELECT count(*) from TABLE_NAME');
$row = mysql_fetch_assoc($result);
echo $row['rows'];
4 голосов
/ 25 февраля 2011

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

0 голосов
/ 25 февраля 2011

mysql_num_rows может быть полезно для вас.

...