MySQL:索引列上的COUNT(DISTINCT)有多昂贵?

时间:2019-02-15 17:20:38

标签: mysql

假设我有一个这样的表

CREATE TABLE `t` (
  `bucket_id` bigint(20) NOT NULL,
  `sub_bucket_id` varchar(256) NOT NULL,
  `id` bigint(20) unsigned NOT NULL,
  PRIMARY KEY (`bucket_id`,`sub_bucket_id`,`id`),
  KEY `bucket_and_id` (`bucket_id`,`id`),
  KEY `id` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1

(ID在子存储桶中是不同的,但在同一存储桶中的子存储桶中是不相同的。)

运行起来在计算复杂性上有多昂贵

> SELECT bucket_id, COUNT(DISTINCT id) FROM t GROUP BY bucket_id

特别是,它是否具有比全表扫描更好的复杂性?

最重要的是,要确认一下:添加WHERE bucket_id IN (1,2,3)是否有帮助,以便不会扫描所选存储桶之外的行?

0 个答案:

没有答案