我有三个执行COUNT的SELECT语句。认为将mysql结合起来会更有效率和更友善:
$query = $db->query("SELECT count(category) FROM table WHERE cid='290463' and category = 'x'");
$tot_x = $db->result($query, 0);
$query = $db->query("SELECT count(category) FROM table WHERE cid='290463' and category = 'y'");
$tot_y = $db->result($query, 0);
$query = $db->query("SELECT count(category) FROM table WHERE cid='290463' and category = 'z'");
$tot_z = $db->result($query, 0);
一句话:
SELECT
SUM(category='x' AND cid='290463') as tot_x,
SUM(category='y' AND cid='290463') as tot_y,
SUM(category='z' AND cid='290463') as tot_z
FROM table
问题是,新语句比分别运行原始语句慢。
任何人都能够了解为什么新声明会更慢以及建议如何更快地改进SELECT?
答案 0 :(得分:3)
您的原始查询可能能够使用您的表上的索引(基于您的where子句),确保只读取表中相对较小比例的记录 - 而不是整个表,就像在您的表中一样统一查询。尝试将等效条件添加回where子句,如下所示:
SELECT
SUM(category='x') as tot_x,
SUM(category='y') as tot_y,
SUM(category='z') as tot_z
FROM table
WHERE cid='290463' and category in ('x', 'y', 'z')
答案 1 :(得分:0)
SELECT
SUM(IF(category='x',1,0))as tot_x,
SUM(IF(category='y',1,0))as tot_y,
SUM(IF(category='z',1,0))as tot_z
FROM table
WHERE cid='290463'
GROUP BY category