每当phpMyAdmin加载时,在InnoDB上的COUNT(*)


8

这是一个已知的问题,innodb运行缓慢

SELECT count(*) FROM Table

因此,我避免了这一点。但是我注意到,每当我登录phpmyadmin时,它将自动count(*)为我的具有19k行的innodb表执行a ,这可能需要一分钟的时间来执行。但是,count(*)对于其他具有400万行的innodb表,它不会启动。

在phpmyadmin中,“记录”列下的另一个线索是19k行表的记录数显示了确切的值,而400万行表显示了大约的值。

我了解innodb表可以估算行数。但是似乎对于较小的表(在这种情况下,行数为19k),phpmyadmin决定做一个a,count(*)而不是仅仅给出一个估计。

问题是,有没有办法阻止phpmyadmin在我的innodb表上进行这种计数?每当我刷新phpmyadmin屏幕时,只需给出一个估计值而不用进行昂贵的行计数就可以了。


想我找到了答案。$ cfg ['MaxExactCount'] = 20000; 在phpmyadmin设置中。只有超过20k的行才会给出估算值。我的下一个问题是,我在哪里编辑$ cfg ['MaxExactCount']?

@Kenny,只需20000用较小的数字覆盖该值,例如300,保存文件,刷新phpmyadmin,即可开始使用。
Pacerier,2015年

Answers:


3

编辑config.inc.php,并更改MaxExactCount的设置。

$ cfg ['MaxExactCount']
    类型:整数
    默认值:500000

对于InnoDB表,确定phpMyAdmin应该获取多大的表 
使用SELECT COUNT的确切行数。如果返回的近似行数
通过SHOW TABLE STATUS小于此值,将使用SELECT COUNT, 
否则,将使用近似计数。

链接.........
Pacerier,2015年

@Pacerier:更好的链接。
Mike Sherrill'Cat Recall'15

1
啊,现在你让我的答案冗余.......
Pacerier

1

如果估计的行数在设置的阈值内(默认为500k,具体取决于您的版本),则phpMyAdmin将执行实际操作 select count(*)

$cfg['MaxExactCount']

对于InnoDB表,确定使用phpMyAdmin可以获取多大表的确切行数SELECT COUNT。如果返回的近似行计数SHOW TABLE STATUS小于此值,SELECT COUNT则将使用,否则将使用近似计数。

只需将阈值设置为较小的值即可避免毫无意义的select count(*)s。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.