gpt4 book ai didi

php - 使用 2 个 WHERE 条件计算一个表中的值

转载 作者:行者123 更新时间:2023-11-29 03:12:38 26 4
gpt4 key购买 nike

我想知道对于一个简单的事情,什么对性能和编程风格更好:从一个表中获取 2 个值的计数(以下所有查询都做同样的工作)。

进行 2 次单一查询:

SELECT count(*) FROM `a` WHERE  categories_id=2
SELECT count(*) FROM `a` WHERE group_id=92

或者使用子查询

SELECT (SELECT count(*) FROM `a` WHERE  categories_id=2 AS categories)
,(SELECT count(*) FROM `a` WHERE group_id=92) AS groups)

或联合

SELECT count(*) FROM `a` WHERE  categories_id=2  
UNION
SELECT count(*) FROM `a` WHERE group_id=92

最佳答案

这三者之间的主要区别在于对结果值的处理,尽管这不会造成伤害。

  1. 第一个示例在两个单独的提取操作(在单独的语句上)中返回两个值。
  2. 第二个示例将两个值作为单个提取操作的一部分返回。
  3. 第三个示例在两个单独的提取操作中返回两个值(在同一语句中)。

性能方面,只有两行数据,三者之间几乎没有选择。第二种(两个子查询)解决方案用一条语句完成最多的工作,并且只需要一次提取操作,因此它可能是最快的。第一种需要分别解析两条语句,加上两组操作,所以应该是最慢的。但是,您能否真正衡量这一点取决于很多因素。如果客户端在澳大利亚而服务器在欧洲,那么往返延迟很可能意味着第二种或第三种解决方案是最好的(并且差异可能取决于 DBMS 是否使用单个客户端 - 服务器返回多行消息交换)。如果客户端与服务器在同一台机器上,那么往返延迟就不那么重要了。

为了便于理解,UNION 版本可能足够干净;它不会让任何阅读它的人感到困惑。第一个版本可能更简洁(少了一个关键字),但差别很小。

如果备选方案的数量增加(超过一个 group_id 值,或超过一个 categories_value),那么我认为 UNION 在清晰度上胜出:

SELECT 'G' AS type, group_id, COUNT(*)
FROM a
WHERE group_id IN (92, 104, 137, 291)
GROUP BY type, group_id
UNION
SELECT 'C' AS type, categories_id, COUNT(*)
FROM a
WHERE categories_id IN (2, 3, 13, 17, 19, 21)
GROUP BY type, categories_id

“类型”列允许您区分共享相同 ID 号的组 ID 和类别 ID(尽管它们是两种不同类型的 ID)。

因为它更容易扩展,我可能会选择选项 3 (UNION),除非有令人信服的实时数据计时实验表明选项 2(子查询)实际上更快。

关于php - 使用 2 个 WHERE 条件计算一个表中的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5851312/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com