我一直在寻找优化计数不同查询的方法,但现在却没有成功。在我看来应该有一些简单的解决方案,但我还没有找到它。
我有一张表中有大量记录。它目前有大约50万条记录,最终将达到数百万条。
我目前正在尝试实时显示3个字段的明显计数,但我的计数不同查询非常慢,因此我的结果“落后”实际计数。
我在网上找到的并且一直在使用的查询是:
select count(*) from (select distinct c1, c2 from table
where c3 >= '2018-04-05 00:00:00') as count;
select count(distinct c1, c2) from table where c3 >= '2018-04-05 00:00:00';
每个查询任务运行约3秒,但我需要它尽可能快。
有什么方法可以实现这个目标吗?
干杯。
编辑:值得注意的是,我已经对列进行了索引,但它只减少了约1秒的查询。
以下是解释的输出:
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
-- ----------- ---------- ---------- ---- ------------- ---- ------- ---- ------ -------- ---------------
1 PRIMARY <derived2> NULL ALL NULL NULL NULL NULL 503560 100.0 NULL
2 DERIVED TABLE NULL ALL NULL NULL NULL NULL 503560 100.0 Using temporary
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
-- ----------- --------- ---------- ---- ------------- ---- ------- ---- ------ -------- -----
1 SIMPLE TABLE NULL ALL NULL NULL NULL NULL 503562 100.0 NULL
答案 0 :(得分:0)
尝试使用group而不是distinct。当您有大量记录时,区别是昂贵的,因为DB在查找计数之前对结果集进行排序。
select count(*) from (select c1, c2 from table group by c1,c2
where c3 >= '2018-04-05 00:00:00') as count;