假设我有一个这样的表
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)
是否有帮助,以便不会扫描所选存储桶之外的行?