2011-02-25 5 views
8

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

SELECT COUNT(*) FROM table; 

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

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

+2

См. Также: http://www.tocker.ca/2013/05/02/fastest-way-to-count-rows-in-a-table.html –

ответ

17

Если все в порядке с расчетного числа и просто не хотят возиться с запуском SHOW TABLE STATUS из PHP, вы можете использовать information_schema DB:

SELECT TABLE_ROWS FROM information_schema.tables 
WHERE TABLE_SCHEMA = 'my_db_name' 
AND TABLE_NAME = 'my_table_name'; 
+0

Мне любопытно, как это оценивается. Может ли кто-нибудь предоставить мне больше информации об этом? Почему бы это число не было полностью точным? Благодарю. –

+2

@MMiller - Вы можете прочитать все об этом здесь: http://dev.mysql.com/doc/innodb/1.1/en/innodb-other-changes-statistics-estimation.html – Galz

+0

+1 Очень хорошо, когда нам нужно не используйте 'WHERE'. Если вы используете 'WHERE', возможно,' SELECT count (1) 'является лучшим выходом (я не знаю, делает ли это буфер всех отображаемых строк). –

-5

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

+3

Не так ли просто указать количество строк в буферизованный результирующий набор? Я ищу количество строк в полной таблице. – Wige

3

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

6

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

Упрощенная Verion кода является

$result = mysql_query('explain SELECT count(*) from TABLE_NAME'); 
$row = mysql_fetch_assoc($result); 
echo $row['rows']; 
Смежные вопросы