2016-04-26 3 views
-1

Одна и та же база данных импортировала 3 три раза после пустой всей базы данных и удивительно каждый раз, когда она показывала различное количество записей. Зачем?Тот же импорт базы данных MySQL, показывающий разные количества записей

первый импорт времени: enter image description here

второй импорт времени: enter image description here

третий импорт времени: enter image description here

Это не право доверять на счетчике Ряды как показано на картинке, это показывает приблизительное значение, как предполагалось в качестве ошибки. Итак, вопрос в том, как мы можем гарантировать правильность базы данных и отсутствие записи? примечание: короткое сокращение требует не использовать счет с каждой таблицей, это будет много времени.

ответ

2

MySQL, на удивление, очень плохо чисел. Для таблиц InnoDB часто используются оценки количества строк, которые они содержат, и они могут быть совершенно ошибочными.

То, как он вычисляет числа, которые вы видите, - это общий размер данных таблицы и деление на средний размер строки в байтах. Это, как правило, достаточно хорошая аппроксимация ваших данных, но это может быть очень завораживающим, исключающим фактором в 100 раз.

Единственный способ узнать наверняка - сделать COUNT(*), что может занять некоторое время, чтобы вычислять на очень активной таблице.

+0

Спасибо, я могу гарантировать, что каждая таблица, выполнив этот запрос, есть какой-нибудь ярлык? –

+0

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

+0

Я стараюсь, чтобы он на каждом столе занимал много времени. –

3

Инструменты, такие как phpmyadmin/adminer, всегда выбирают количество строк из INFORMATION_SCHEMA. В случае двигателя хранения InnoDb количество строк является приблизительной оценкой, оно никогда не является точным значением. В table_rows который PhpMyAdmin кирки, который никогда не является точным для Innodb

SELECT SUM(TABLE_ROWS) FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'table_name'; 

Для точного значения мы должны

SELECT count(*) FROM 'table_name'; 

Для справки: http://dev.mysql.com/doc/refman/5.7/en/tables-table.html

+0

Спасибо, я могу гарантировать, что каждая таблица, выполняя этот запрос, есть какой-нибудь ярлык? –

2

я бы не полагаться на сравнение чисел с тильда (~) в качестве префикса. ~ означает приближение.

Основано на ответе на бенксор на это phpMyAdmin - What a tilde (~) means in rows column? Приближение может варьироваться.

Чтобы проверить реальное количество строк ввезенных использование: select count(*) from TABLE_NAME

+0

Спасибо, я могу гарантировать, что каждая таблица, выполнив этот запрос, есть какой-нибудь ярлык? –

+0

Хорошее решение от Nathan сообщается по этому вопросу http://stackoverflow.com/questions/286039/get-record-counts-for-all-tables-in-mysql-database.(Извините, но я не могу вставить код здесь, потому что неправильно разобран) –

2

Вы заметите, что все «отрицательных записей MySQL» Это не является негативным признаком его ~, что означает приблизительно. если вы хотите фактического количества использования

SELECT count(*) FROM 'table_name'; 
+0

Спасибо, я могу гарантировать, что каждая таблица, выполнив этот запрос, есть какой-нибудь ярлык? –

Смежные вопросы