任何人都有权威的答案,哪个更有效率?
GROUP BY
YEAR(FROM_UNIXTIME(col))
/* or */
GROUP BY
EXTRACT(YEAR FROM FROM_UNIXTIME(col))
我发现这个SO post,它提出了一个更普遍的问题,但是没有表现,但没有找到任何权威的,只有轶事。
答案 0 :(得分:0)
MySQL同等地对待YEAR(x)
和EXTRACT(YEAR FROM x)
。两者在性能或其他方面完全没有区别。
我在带有查询的数百万行的表格上对此进行了测试:
SELECT DISTINCT YEAR(x) FROM tbl
和
SELECT DISTINCT EXTRACT(YEAR from x) FROM tbl
并且结果实际上是相同的(在0.5%左右)。
答案 1 :(得分:0)
当您要一起提取日期的两个或多个部分时,提取非常有用。这对特定查询有很多用途。
例如
SELECT EXTRACT(YEAR_MONTH FROM "2017-06-15 09:34:21");
ans:201706
SELECT EXTRACT(MINUTE_SECOND FROM "2017-06-15 09:34:21");
ans:3421。
这可以直接通过提取来完成,因为没有特定的日期时间功能。提取总是返回一个整数,这使处理变得更容易。