Mysql 为什么phpmyadmin结果中的估计行数差异很大?
在数据库上没有任何更改的情况下,我在表上得到了非常不同的行数 这是什么原因造成的Mysql 为什么phpmyadmin结果中的估计行数差异很大?,mysql,phpmyadmin,Mysql,Phpmyadmin,在数据库上没有任何更改的情况下,我在表上得到了非常不同的行数 这是什么原因造成的 Server version: 5.1.63-cll Engine: InnoDB 与MyISAM表不同,InnoDB表不跟踪表包含的行数 因此,要知道InnoDB表中的确切行数,唯一的方法是检查表中的每一行并累积计数。因此,在大型InnoDB表上,从InnoDB_表执行SELECT COUNT(*)查询可能会非常慢,因为它会进行全表扫描以获取行数 phpMyAdmin使用类似于SHOW TABLE STAT
Server version: 5.1.63-cll
Engine: InnoDB
与MyISAM表不同,InnoDB表不跟踪表包含的行数 因此,要知道InnoDB表中的确切行数,唯一的方法是检查表中的每一行并累积计数。因此,在大型InnoDB表上,从InnoDB_表执行
SELECT COUNT(*)查询可能会非常慢,因为它会进行全表扫描以获取行数
phpMyAdmin使用类似于SHOW TABLE STATUS
的查询从引擎(InnoDB)获取表中行数的估计计数。因为这只是一个估计,每次你调用它时,它都会变化,有时变化可能相当大,有时很接近
这是一篇关于Percona的博文,内容丰富
MySQL手册页用于以下状态:
行数。某些存储引擎(如MyISAM)存储
精确计数。对于其他存储引擎,如InnoDB,此值为
近似值,可能与实际值相差40
到50%。在这种情况下,使用SELECT COUNT(*)获得准确的计数
伯爵
上的页面将详细介绍:
SHOW TABLE STATUS不会提供InnoDB表的准确统计信息,表保留的物理大小除外。行数只是SQL优化中使用的粗略估计
InnoDB不在表中保留行的内部计数,因为
并发事务可能在同一时间“看到”不同数量的行
同时。要处理t
语句中的选择COUNT(*),InnoDB扫描
表的索引,如果索引不可用,则需要一些时间
完全在缓冲池中。如果您的桌子不经常更换,
使用MySQL查询缓存是一个很好的解决方案。要快速计数,
您必须使用自己创建的计数器表,并让
应用程序根据插入更新它,并删除它。如果
大致的行数就足够了,可以使用显示表格状态
。
见第14.3.14.1节
phpMyAdmin使用快速方法获取行计数,对于InnoDB表,此方法仅返回近似计数
有关修改这些结果的方法,请参阅,但这可能会对性能产生严重影响。等等,重要的一点是显示表状态如何进行估计?但是phpmyadmin GUI可能有一个用于精确计数的快捷按钮:从“我的表”中选择计数(*)
我也遇到了这个问题。i、 e.从
table_name``运行SELECT COUNT(*),返回与InnoDB中返回表视图时显示的值不同的值。PhpMyAdmin中是否有用于实际计数的快捷方式?