mysql - 如何高效地一次获取数据并统计行数?

标签 mysql sql database performance database-performance

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

假设, worker John Smith (john.smith@example.org) 调用一个事件,该事件应返回(1)所有未处理的项目 (isProcessed = false)一方面是(2) John 处理的项目数量,另一方面是。

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

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

就代码性能而言,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/

相关文章:

java - hibernate 中的@OneToMany

sql - 从 SQL Server 中的字符串末尾删除连字符

php - Bloggish 项目 MySQL 数据库设计问题

php - SQL查询结果存入php表

database - 如何在数据库不知情的情况下更新 TClientDataSet?

mysql - 如何在sql中使用自动增量在id列中添加前缀?

php - mysql 和 php fetch_assoc() 不工作

php - 选项数据未在数据库中更新

MYSQL - 分组并选择最高结果并使用 JOIN?

具有特殊条件的 MySQL 求和