我有这个咨询,我想知道哪个更好优化? 这种做法显示了包含每个州的每个州和总草图的计划总数
SELECT l.cve_ent,
COUNT(IF (plano='S',1,NULL)) PLR,
COUNT(IF (plano='C',1,NULL)) CROQUIS
FROM
(localidades l
LEFT JOIN
statusloc s
ON (l.cve_ent=s.cve_ent AND l.cve_mun =s.cve_mun AND l.cve_loc= s.cve_loc))
LEFT JOIN
cigel13 c
ON (l.cve_ent=C.cve_ent AND l.cve_mun =c.cve_mun AND l.cve_loc= c.cve_loc)
WHERE l.esquema='03'
GROUP BY CVE_ENT
或
SELECT l.cve_ent,
COUNT(*) PLR,
FROM
(localidades l
LEFT JOIN
statusloc s
ON (l.cve_ent=s.cve_ent AND l.cve_mun =s.cve_mun AND l.cve_loc= s.cve_loc))
LEFT JOIN
cigel13 c
ON (l.cve_ent=C.cve_ent AND l.cve_mun =c.cve_mun AND l.cve_loc= c.cve_loc)
WHERE l.esquema='03'
GROUP BY cve_ent,plano
答案 0 :(得分:0)
您需要查看EXPLAIN输出以查看计划,我不希望有太大差异。相同数量的行,相同的谓词。区别在于GROUP BY中的附加列(您可能需要在SELECT列表中返回该列,因此您可以告诉您计算的内容。
我的直觉告诉我,如果只有plano
的两个值感兴趣,如果存在差异,则第一种形式可能略好一些。
在第一个查询中,您可以使用以下内容获得等效结果:
SELECT l.cve_ent
, SUM(plano='S') PLR
, SUM(plano='C') CROQUIS
MySQL EXPLAIN解释说: