如何在MySQL中使用Between子句加速count(distinct)

通心粉

我有一个具有1000万行和3列的MySQL表,格式如下:

id                                     time                               num

ca65e871-d758-437e-b76f-175234760e7b  2020-11-14 23:08:05.553770          11112222222
...

为了运行下面的第一个查询,我在表上建立了索引,(num, time)并且工作非常快(在1000万行的表上<5毫秒):

SELECT COUNT(*) 
FROM TABLE_NAME 
WHERE time >= '2020-11-14 23:08:05.553752' AND num = 11112222222

但是我还需要count(distinct)在带有between子句的同一张表上执行以下操作:

SELECT COUNT(DISTINCT num) 
FROM TABLE_NAME 
WHERE time >= '2020-11-14 23:08:05.553752'
  AND num BETWEEN (11112222222 - 30)
              AND (11112222222 + 30)

事实证明,这要慢得多,大约200毫秒。有没有一种方法可以加快在同一表上第二个查询的执行时间?

他们不是

如果您的MySQl是8+,请尝试:

WITH RECURSIVE
cte AS ( SELECT 11112222222 - 30 num
         UNION ALL
         SELECT num + 1 FROM cte WHERE num < 11112222222 + 30 )
SELECT COUNT(*)
FROM cte
WHERE EXISTS ( SELECT NULL
               FROM TABLE_NAME 
               WHERE TABLE_NAME.num = cte.num
                 AND time >= '2020-11-14 23:08:05.553752' )

如果您经常执行这样的查询,那么我建议创建数字从-30到30的服务表,并使用它代替递归CTE。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在MySQL中使用附加的where子句选择count(distinct)?

来自分类Dev

如何在codeigniter中使用not between子句

来自分类Dev

如何在Count函数中使用where子句

来自分类Dev

如何在MySQL中的BETWEEN子句中使用字母数字字段?

来自分类Dev

如何在WHERE子句中使用MySql MAX()

来自分类Dev

如何在where子句中使用mysql extract year

来自分类Dev

如何在Mysql If子句中使用用户变量?

来自分类Dev

如何在MySQL中使用'in'子句优化select的删除?

来自分类Dev

如何在MySQL的WHERE子句中使用OR&AND

来自分类Dev

如何在WHERE子句中使用MySql MAX()

来自分类Dev

如何在 MySQL 的 FROM 子句中使用子查询?

来自分类Dev

如何在此查询中使用DISTINCT子句,以消除重复的结果?

来自分类Dev

如何在JPA中使用where子句

来自分类Dev

如何在searchkick中使用“ where not”子句

来自分类Dev

如何在PIVOT中使用WHERE子句

来自分类Dev

如何在Oracle SQL中使用by by子句

来自分类Dev

如何在Linq中使用IN子句

来自分类Dev

OleDbcommand:如何在参数中使用'In'-子句?

来自分类Dev

如何在Pod中使用where子句

来自分类Dev

如何在SQL中的SUM子句中使用not in子句

来自分类Dev

如何使用 ActiveRecord 在 mysql 中使用 DISTINCT ON

来自分类Dev

如何在生成的查询中使用MySQL COUNT()语句?

来自分类Dev

如何在MySQL查询中使用COUNT()函数返回行数?

来自分类Dev

MySQL-如何在JOIN中使用COUNT()语句

来自分类Dev

如何在nvarchar上使用between子句?

来自分类Dev

如何在InfluxDB中使用Distinct函数

来自分类Dev

如何在分组查询中使用distinct?

来自分类Dev

如何在MS Access中使用DISTINCT?

来自分类Dev

如何在SQL中使用groupby,distinct

Related 相关文章

热门标签

归档