phpMyAdmin - администратор - Что означает тильда (~) в столбце строк?


Я недавно обновил Joomla! установка с 1.5 до 1.7 с большим набором статей и в то время как метод обновления обновлял базу данных (в основном вставляя содержимое в другую таблицу) Я заметил, что значение столбца строк предварялось тильдой (~):

See image

Теперь, на первый взгляд, я предполагаю, что это означает, что значение приблизительное, потому что, когда я обновляю страницу, я вижу другое значение, иногда выше, иногда ниже. Хорошо, допустим, что значение приблизительное, в таком случае, что является причиной этого? Некоторые соображения:

  • ОС: Windows 7.
  • Сервер: Apache 2 с PHP 5.3 и MySQL 5.1.50-сообщество.
Author: vindia, 2011-11-15

3 answers

Количество строк - это приближение, используемое InnoDB для оптимизации запросов. Подсчет (*) намного более неэффективен, и для оптимизации плана запроса достаточно иметь приблизительное представление о количестве строк. phpMyAdmin будет выполнять запрос "показать статус таблицы", чтобы получить информацию о таблице:

Http://dev.mysql.com/doc/refman/5.0/en/show-table-status.html

Для других механизмов хранения, таких как InnoDB, это значение является приблизительным и может отклоняются от фактического значения на целых 40-50%. В таких случаях используйте SELECT COUNT(*) для получения точного подсчета.

 11
Author: bencoder, 2011-11-15 14:56:54

В соответствии с Руководством MySQL по ограничениям InnoDB:

  • SHOW TABLE STATUS не дает точной статистики по таблицам InnoDB, за исключением физического размера, зарезервированного таблицей. Количество строк - это лишь приблизительная оценка, используемая при оптимизации SQL.

  • InnoDB не сохраняет внутреннее количество строк в таблице, поскольку одновременные транзакции могут "видеть" разное количество строк одновременно. Чтобы обработать оператор SELECT COUNT(*) FROM t, InnoDB необходимо сканировать индекс таблицы, что занимает некоторое время, если индекс не полностью находится в буферном пуле. Если ваша таблица меняется не часто, использование кэша запросов MySQL является хорошим решением. Чтобы получить быстрый подсчет, вам нужно использовать таблицу счетчиков, которую вы создаете самостоятельно, и позволить вашему приложению обновлять ее в соответствии с выполняемыми вставками и удалениями. Если приблизительного количества строк достаточно, можно использовать SHOW TABLE STATUS. См. Раздел 13.2.13.1, " Советы по настройке производительности InnoDB".

Согласно странице для SHOW TABLE STATUS, отображаемые InnoDB числа строк могут отличаться от фактического на 50%.

 7
Author: Gustav Bertram, 2011-11-15 15:03:36

Какие существуют типы таблиц? Таблицы MyISAM хранят точное количество строк в своих метаданных. Таблицы InnoDB не могут, так как точное количество строк варьируется в зависимости от того, какие транзакции находятся "в полете", поэтому количество, показанное для них, помечено как оценка (~ = "приблизительно") вместо "это именно столько".

 1
Author: Marc B, 2011-11-15 14:54:27