Php 从一个带有2个WHERE条件的表中计算值
我想知道对于一件简单的事情来说,什么对性能和编程风格更好:从一个表中获取2个值的计数(下面所有查询都做相同的工作) 进行两次单独查询:Php 从一个带有2个WHERE条件的表中计算值,php,mysql,Php,Mysql,我想知道对于一件简单的事情来说,什么对性能和编程风格更好:从一个表中获取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 c
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
第一个选项,做两次选择,效率总是稍低一些,因为它涉及到数据库的额外往返。在后两者之间,union版本在理论上会稍微慢一些,因为union将导致数据库必须对值进行排序并生成union。实际上,对于两个值来说,这并不能通过查询的两个主要部分来衡量。这三者之间的主要区别在于对结果值的处理,尽管这不是创伤性的
组id
值,或超过一个类别
值),那么我认为工会在清晰性方面获胜:
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(子查询)实际上更快。使用
UNION ALL
将删除“排序”步骤。