假设您有一张包含数百万条记录的表-让我们将每个表称为“项目”。
该表有一些列,其中包括一个布尔列-称为isProcessed
-和带有处理该项目的工作人员的电子邮件地址的一列-称为worker
。
假设工人约翰·史密斯([email protected])调用了一个事件,该事件将一方面返回(1)所有未处理的项目(isProcessed
= false),并且(2)约翰返回的事件数量另一个。
我的第一个想法是简单地执行两个查询,一个查询获取项目,第二个查询计数由John处理的所有项目。
但这似乎效率很低,因为我需要对所有数百万条记录进行两次迭代。我还可以遍历每一行并同时检查列isProcessed
和worker
,因此我不会两次运行该表。
在代码性能方面,哪种方法在SQL中更有效?或更笼统地说,推荐哪种方法?
最佳答案
您可以在一个查询中执行此操作:
select count(*) as NumProcessed, sum(isProcessed = 0) as NumUnprocessed
from t
where worker = '[email protected]';