-3

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

   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
4

1 回答 1

0

您需要查看 EXPLAIN 输出才能看到计划,我预计不会有太大差异。相同的行数,相同的谓词。不同之处在于 GROUP BY 中的附加列(您可能需要在 SELECT 列表中返回它,这样您就可以知道您得到的计数。

我的直觉告诉我,如果存在差异,如果您只对 的这两个值感兴趣,第一种形式可能会稍好一些plano

在第一个查询中,您可以获得等效结果:

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

MySQL解释解释:

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

于 2013-07-12T20:08:47.573 回答