2010-06-02 2 views
3

я делаю:EXPLAIN и COUNT возвращаются два различных значения

explain select * from calibration; 

он говорит 52133456345632 строки

, когда я сделать:

select count(*) from calibration; 

я получаю 52134563456961

может

кого-то объясните, что здесь происходит?

+0

Разве вы не вставляли новые строки между выполнением этих двух команд? –

+2

Просто уточнить: версия счетчика будет точной, так как она действительно будет считать ваши существующие строки. Версия объяснения не учитывает ваши строки, но может использовать оценку/кеш. Объяснение не предназначено для фактического использования в коде или производстве - это просто инструмент для анализа ваших запросов. –

+0

henrik, пожалуйста, положите это в ответ, чтобы я мог отметить его правильно. –

ответ

7

Таблица статистики (используется EXPLAIN) основана на системных кешетах, которые могут быть неточными.

http://dev.mysql.com/doc/refman/5.1/en/using-explain.html говорит:

Для таблиц InnoDB, это число является приблизительным и может не всегда быть точным.

Таким образом, версия запроса «count()» будет точной, поскольку она действительно «подсчет» существующих строк. Версия 'explain' не обязательно учитывает ваши строки, но может использовать оценку/кеш. Объяснение не предназначено для фактического использования в коде или производстве - это просто инструмент для анализа ваших запросов.

+0

как сбросить кеш? –

+1

Не знаю, на странице руководства не говорится. Но число на 99,8% точнее, вам действительно нужно это точно? –

+1

Я добавил свой комментарий к вопросу к вашему ответу, поскольку он не был альтернативой, а просто разъяснением. Надеюсь, все в порядке. –