我有一个 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/