Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 为什么phpmyadmin结果中的估计行数差异很大?_Mysql_Phpmyadmin - Fatal编程技术网

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中是否有用于实际计数的快捷方式?