Mysql
 sql >> база данни >  >> RDS >> Mysql

Защо приблизителният брой редове е много различен в резултатите от phpmyadmin?

За разлика от MyISAM таблиците, таблиците InnoDB не следят колко реда съдържа таблицата.

Поради това единственият начин да разберете точния брой редове в таблица на InnoDB е да проверите всеки ред в таблицата и да натрупате брой. Следователно, на големи таблици InnoDB, извършване на SELECT COUNT(*) FROM innodb_table заявката може да бъде много бавна, защото извършва пълно сканиране на таблицата, за да получи броя на редовете.

phpMyAdmin използва заявка като SHOW TABLE STATUS за да получите приблизителен брой редове в таблицата от машината (InnoDB). Тъй като това е само приблизителна оценка, тя варира всеки път, когато я извикате, понякога вариациите могат да бъдат доста големи, а понякога са близки.

Ето една информативна публикация в блога относно COUNT(*) за InnoDB таблици от Percona.

Страницата с ръководство на MySQL за ПОКАЖЕТЕ СТАТУС НА ТАБЛИЦА гласи:

Броят на редовете. Някои системи за съхранение, като MyISAM, съхраняват точния брой. За други машини за съхранение, като InnoDB, тази стойност е приближение и може да варира от действителната стойност с до 40 до 50%. В такива случаи използвайте SELECT COUNT(*), за да получите точен брой.

Страницата на ограниченията на InnoDB навлиза в повече подробности:

SHOW TABLE STATUS не дава точни статистически данни за InnoDB таблици, с изключение на физическия размер, запазен от таблицата. Броят на редовете е само приблизителна оценка, използвана при SQL оптимизацията.

InnoDB не поддържа вътрешен брой редове в таблица, тъй като едновременните транзакции могат да „видят“ различен брой редове едновременно. За обработка на SELECT COUNT(*) FROM t оператор, InnoDB scansan индекс на таблицата, което отнема известно време, ако индексът не е изцяло в буферния пул. Ако вашата таблица не се променя често, използването на MySQL кеша на заявките е добро решение. За да получите бързо броене, трябва да използвате таблица с броячи, която създавате сами, и да оставите приложението си да го актуализира според вмъкванията и изтриванията, които прави. Ако приблизителният брой редове е достатъчен, SHOW TABLE STATUS може да се използва. Вижте раздел 14.3.14.1, „Производство на InnoDB Съвети за настройка“ .



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Съпоставяне, чувствително към главни букви в MySQL

  2. Автоматизиране на внедряване на база данни на MySQL

  3. Мониторинг на Percona XtraDB клъстер – ключови показатели

  4. SQL уникален въпрос за чувствителност на главни и малки букви

  5. Как да експортирате база данни с помощта на командния ред