假设您有一个包含数百万条记录的表 - 让我们将每条记录称为“项”。
该表有一些列,其中包括一个 bool 列 - 我们称之为 isProcessed
- 以及一个包含处理该项目的工作人员的电子邮件地址的列 - 我们称之为 worker
.
假设, worker John Smith (john.smith@example.org) 调用一个事件,该事件应返回(1)所有未处理的项目 (isProcessed
= false)一方面是(2) John 处理的项目数量,另一方面是。
我的第一个想法是简单地执行两个查询,一个获取项目,第二个查询计算 John 处理的所有项目。
但这似乎效率相当低,因为我需要对所有数百万条记录进行两次迭代。我还可以迭代每一行并同时检查 isProcessed
和 worker
两列,这样我就不会运行该表两次。
就代码性能而言,SQL 中哪种方法更高效?或者更一般地说,推荐哪种方法?
最佳答案
您可以在一个查询中完成此操作:
select count(*) as NumProcessed, sum(isProcessed = 0) as NumUnprocessed
from t
where worker = 'john.smith@example.org';
关于mysql - 如何高效地一次获取数据并统计行数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34427907/