MySQL:COUNT(*)或COUNT(IF())哪个更好?

时间:2013-07-12 20:03:20

标签: mysql database

我有这个咨询,我想知道哪个更好优化? 这种做法显示了包含每个州的每个州和总草图的计划总数

   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

1 个答案:

答案 0 :(得分:0)

您需要查看EXPLAIN输出以查看计划,我不希望有太大差异。相同数量的行,相同的谓词。区别在于GROUP BY中的附加列(您可能需要在SELECT列表中返回该列,因此您可以告诉您计算的内容。

我的直觉告诉我,如果只有plano的两个值感兴趣,如果存在差异,则第一种形式可能略好一些。

在第一个查询中,您可以使用以下内容获得等效结果:

SELECT l.cve_ent
     , SUM(plano='S') PLR
     , SUM(plano='C') CROQUIS

MySQL EXPLAIN解释说:

http://dev.mysql.com/doc/refman/5.5/en/using-explain.html