带有分组的mySql查询在WHERE子句中的相同字段过滤器上

时间:2013-05-01 12:52:50

标签: mysql group-by

鉴于这两个问题,我无法解释原因

SELECT YEAR(TIMESTAMP) AS YEAR,
       MONTH(TIMESTAMP) AS MONTH,
       DAY(TIMESTAMP) AS DAY,
       COUNT(IDENTITY) AS number,
       type
FROM entity AS e,
     annotation AS a
WHERE e.annotationIdAnnotation = a.idAnnotation
  AND type = "Location"
GROUP BY YEAR(TIMESTAMP),
         MONTH(TIMESTAMP),
         DAY(TIMESTAMP),
         type


SELECT YEAR(TIMESTAMP) AS YEAR,
       MONTH(TIMESTAMP) AS MONTH,
       DAY(TIMESTAMP) AS DAY,
       COUNT(IDENTITY) AS number
FROM entity AS e,
     annotation AS a
WHERE e.annotationIdAnnotation = a.idAnnotation
  AND type = "Location"
GROUP BY YEAR(TIMESTAMP),
         MONTH(TIMESTAMP),
         DAY(TIMESTAMP)

第二个占第一个的100%。 我在类型上有一个btree索引,但是我无法解释为什么在已经由where子句过滤的字段上的group by可以增强查询的性能。

提前致谢

1 个答案:

答案 0 :(得分:0)

这是非常直接和简单的原因。 如你所说,你有类型列索引。因此索引使查询更快。

在第一个查询中,您使用的是where and GROUP by子句中的索引类型,但在第二个查询中,您只使用where子句中的类型。因此,在第一个查询中,GROUP BY子句中的类型使用可以快速查询,如减少行数并选择一组行。

有关索引see here的详细信息。

此链接将清除更多内容。

这是第一个查询比第二个查询快的原因。