有什么方法可以在 myisam 中使用 where 条件进行快速不准确的计数(*)?

Is there any way to do a fast inaccurate count(*) with a where condition in myisam?

我有一个 table 有 1.5 亿行,定义如下:

CREATE TABLE `tasks` (
  `id` int unsigned NOT NULL AUTO_INCREMENT,
  `task` varchar(255) NOT NULL,
  `done` tinyint unsigned NOT NULL DEFAULT '0',
  PRIMARY KEY (`id`),
  KEY `done` (`done`)
) ENGINE=MyISAM AUTO_INCREMENT=154505834 DEFAULT CHARSET=utf8

select count(*) from tasks where done = 1; 需要 20 秒。

我不太关心确切的值:将它四舍五入到最接近的百万没有问题。有没有办法让 less 查询的准确性降低,但速度更快?

如果您已尝试建立索引但无法加快速度,并且升级硬件(RAM、SSD 等)不是一种选择,请考虑某种形式的 "architecture" 方法:例如记录您可以在第二天查找的每晚计数快照?这够准确吗?

编辑:或者,每小时,或者任何有效的频率!