假设您有一张包含数百万条记录的表-让我们将每个表称为“项目”。
该表有一些列,其中包括一个布尔列-称为isProcessed-和带有处理该项目的工作人员的电子邮件地址的一列-称为worker

假设工人约翰·史密斯([email protected])调用了一个事件,该事件将一方面返回(1)所有未处理的项目(isProcessed = false),并且(2)约翰返回的事件数量另一个。

我的第一个想法是简单地执行两个查询,一个查询获取项目,第二个查询计数由John处理的所有项目。

但这似乎效率很低,因为我需要对所有数百万条记录进行两次迭代。我还可以遍历每一行并同时检查列isProcessedworker,因此我不会两次运行该表。

在代码性能方面,哪种方法在SQL中更有效?或更笼统地说,推荐哪种方法?

最佳答案

您可以在一个查询中执行此操作:

select count(*) as NumProcessed, sum(isProcessed = 0) as NumUnprocessed
from t
where worker = '[email protected]';

08-06 19:09