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 有没有办法在myisam中使用where条件进行快速不准确计数(*)?_Mysql_Myisam - Fatal编程技术网

Mysql 有没有办法在myisam中使用where条件进行快速不准确计数(*)?

Mysql 有没有办法在myisam中使用where条件进行快速不准确计数(*)?,mysql,myisam,Mysql,Myisam,我有一个包含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=154505

我有一个包含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
从任务中选择count(*),其中done=1需要20秒


我不太关心确切的值:把它四舍五入到最接近的百万是没有问题的。有没有一种方法可以使查询少一些,但速度更快?

< P>如果你尝试过索引,并且不能加速,升级硬件(RAM,SSD,无论如何)不是一种选择,那么就考虑某种形式的“架构”方法:例如,记录一个可以在第二天查找的计数的夜间快照。这是否足够准确


编辑:或,每小时,或任何频率工作

done
上添加索引,如下所示:
altertable任务添加索引(done)
@ojovirtual Key是索引的同义词<代码>键通常是索引的同义词。在列定义中给定键属性主键时,也可以将其指定为仅键。这是为了与其他数据库系统兼容而实现的。
@BenSwinburne-oopsss,对不起,伙计,没有看到!如果数据是随机的,那么您可以计算done=1的
概率
,然后
概率*totalnum
将使您到达那里