寻求帮助加快对大型mysql数据库的计数不同查询

时间:2018-04-19 14:39:06

标签: mysql sql

我一直在寻找优化计数不同查询的方法,但现在却没有成功。在我看来应该有一些简单的解决方案,但我还没有找到它。

我有一张表中有大量记录。它目前有大约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 

1 个答案:

答案 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;