0

鉴于这两个查询,我无法解释为什么,

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 子句过滤的字段进行分组可以提高查询的性能。

提前致谢

4

1 回答 1

0

有一个非常直接和简单的原因。正如您所说,您在类型列上有索引。所以索引使查询快速。

在第一个查询中,您使用的是类型,即在索引中的 inwhere and GROUP by子句,但在第二个查询中,您使用的是 type in onlywhere子句。因此,在第一个查询中,GROUP BY子句中使用的类型使查询速度更快,因为减少了行数并选择了一组行。

有关索引的更多信息,请参见此处

此链接将清除更多内容。

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

于 2013-05-01T13:05:13.737 回答