【问题标题】:How to count total rows GROUP BY in MySQL the fastest如何在 MySQL 中以最快的速度计算总行数 GROUP BY
【发布时间】:2021-06-25 06:58:05
【问题描述】:

我有一个示例查询

SELECT COUNT(counts) 
FROM 
    (SELECT COUNT(*) AS counts
     FROM table AS table1
     LEFT JOIN table_2 as table2 ON table2.id = table1.pr_id
     WHERE table1.active = 1
     GROUP BY table1.column1) as t

我得到了结果

20563

结果是正确的,但是速度太慢了,我不得不等待长达 15 秒才能进行 1 次查询

15秒太大了,有什么办法可以尽快提高速度?

谢谢大家!

【问题讨论】:

  • 为什么左连接使用内部查询而不是直接左连接?它让它变慢了。
  • @Strawberry 我修好了,重要的是 GROUP BY table1.coulum1
  • Akina 是对的,外连接在这种情况下没有意义
  • 描述你想要做什么。也许你想要SUM(counts),但这也可能没有意义。

标签: mysql group-by count


【解决方案1】:

内部计数没有意义。所以

SELECT COUNT(*) FROM (
  SELECT DISTINCT table1.column1
  FROM table AS table1
  LEFT JOIN  ....
  WHERE ....
  ) as t

匹配加入条件和进一步WHERE / DISTINCT的索引会改进。

PS。检查LEFT 是否有意义,也许INNER JOIN 就足够了。

【讨论】:

  • 谢谢!但我试了一下,是 13 秒
  • 我没看到
  • @tranthaihoang 在形式上这对于简单的情况来说很奇怪。您的 WHERE 检查正确表的值,考虑到它们可以为 NULL,是吗?
猜你喜欢
  • 2021-02-21
  • 2016-02-27
  • 1970-01-01
  • 2012-06-15
  • 2012-01-22
  • 1970-01-01
  • 2011-08-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多