mysql - 在循环中运行 SQL count(*) 查询或尝试将其合并到父查询中是否更快?

标签 mysql sql performance optimization count

我有一个 SQL 查询。

SELECT `shifts`.*, `races`.`race_attrition_rate`
FROM `shifts`
JOIN `races` ON `races`.`race_id` = `shifts`.`race_id`
WHERE `shifts`.`race_id` = 'X'
AND `shift_deleted` =0
ORDER BY `shift_name` ASC, `shift_id` ASC

该查询从数据库中提取志愿者轮类列表。然后我有一个 PHP 循环,对于在上述查询中提取的每个类次,运行此 SQL 查询。

SELECT COUNT(*) AS `numrows`
FROM `volunteer_shifts`
WHERE `shift_id` = 'Y'
AND `shift_deleted` =0

因此,如果第一个查询中有 5 个类次,则第二个查询运行 5 次,每个类次一次。

1) 这两个查询可以合并在一起吗?合并后的代码会是什么样子?

2) 将这两个查询合并在一起会更快吗?

3) 将它们合并在一起可能会降低代码的可读性。那么什么是最佳实践?两个可读的查询还是一个难以阅读但快速的查询?

最佳答案

除非您发布表架构,否则我们不知道哪个运行得更快。 如果我是你,我可能会运行查询 1,收集所有 shift_id,然后再运行 1 个查询,使用 IN 提取 shift_id 列表的计数

是这样的。

SELECT COUNT(*) AS `numrows`, `shift_id`
FROM `volunteer_shifts`
WHERE `shift_id` IN ('42','other number', 'more numbers'...)
AND `shift_deleted` =0
GROUP BY `shift_id`

关于mysql - 在循环中运行 SQL count(*) 查询或尝试将其合并到父查询中是否更快?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46832076/

相关文章:

mysql - 建立 N-M 关系的问题

mysql - 800万条记录查询性能

mysql - 导入 magento 数据库时遇到问题

mysql - 如何组合两个 SQL 查询,使一个查询的输出成为另一个查询的条件

双等号 (==) 和三等号 (===) 之间的 JavaScript 性能差异

performance - Swift 编译器性能

c++ - 如果程序在源代码中使用较短的名称,它会更有效吗?

php - 分页打印数据自动递增

php - 保护通过电子邮件发送的delete.php链接

java - 如何在 JDBC 中获取插入 ID?