我正在尝试在一个相当大的数据集上运行我认为是一个简单的查询,并且它需要很长时间才能执行——它在“发送数据”状态下停滞 3-4 小时或更长时间。
该表如下所示:
CREATE TABLE `transaction` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`uuid` varchar(36) NOT NULL,
`userId` varchar(64) NOT NULL,
`protocol` int(11) NOT NULL,
... A few other fields: ints and small varchars
`created` datetime NOT NULL,
PRIMARY KEY (`id`),
KEY `uuid` (`uuid`),
KEY `userId` (`userId`),
KEY `protocol` (`protocol`),
KEY `created` (`created`)
) ENGINE=InnoDB AUTO_INCREMENT=61 DEFAULT CHARSET=utf8 ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=4 COMMENT='Transaction audit table'
查询在这里:
select protocol, count(distinct userId) as count from transaction
where created > '2012-01-15 23:59:59' and created <= '2012-02-14 23:59:59'
group by protocol;
该表有大约 2.22 亿行,查询中的 where 子句过滤到大约 2000 万行。distinct 选项会将其减少到大约 700,000 个不同的行,然后在分组之后(以及当查询最终完成时),实际返回 4 到 5 行。
我意识到这是很多数据,但对于这个查询来说,4-5 小时似乎是一个非常长的时间。
谢谢。
编辑:作为参考,这是在 db.m2.4xlarge RDS 数据库实例上的 AWS 上运行的。