phpMyAdmin - администратор - Что означает тильда (~) в столбце строк?
Я недавно обновил Joomla! установка с 1.5 до 1.7 с большим набором статей и в то время как метод обновления обновлял базу данных (в основном вставляя содержимое в другую таблицу) Я заметил, что значение столбца строк предварялось тильдой (~):
Теперь, на первый взгляд, я предполагаю, что это означает, что значение приблизительное, потому что, когда я обновляю страницу, я вижу другое значение, иногда выше, иногда ниже. Хорошо, допустим, что значение приблизительное, в таком случае, что является причиной этого? Некоторые соображения:
- ОС: Windows 7.
- Сервер: Apache 2 с PHP 5.3 и MySQL 5.1.50-сообщество.
3 answers
Количество строк - это приближение, используемое InnoDB для оптимизации запросов. Подсчет (*) намного более неэффективен, и для оптимизации плана запроса достаточно иметь приблизительное представление о количестве строк. phpMyAdmin будет выполнять запрос "показать статус таблицы", чтобы получить информацию о таблице:
Http://dev.mysql.com/doc/refman/5.0/en/show-table-status.html
Для других механизмов хранения, таких как InnoDB, это значение является приблизительным и может отклоняются от фактического значения на целых 40-50%. В таких случаях используйте SELECT COUNT(*) для получения точного подсчета.
В соответствии с Руководством 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%.
Какие существуют типы таблиц? Таблицы MyISAM хранят точное количество строк в своих метаданных. Таблицы InnoDB не могут, так как точное количество строк варьируется в зависимости от того, какие транзакции находятся "в полете", поэтому количество, показанное для них, помечено как оценка (~ = "приблизительно") вместо "это именно столько".