MySQL - YEAR(FROM_UNIXTIME(col))vs EXTRACT(年份来自col)

时间:2014-12-15 21:18:50

标签: mysql sql performance

任何人都有权威的答案,哪个更有效率?

GROUP BY 
    YEAR(FROM_UNIXTIME(col))

/* or */

GROUP BY
    EXTRACT(YEAR FROM FROM_UNIXTIME(col))

我发现这个SO post,它提出了一个更普遍的问题,但是没有表现,但没有找到任何权威的,只有轶事。

2 个答案:

答案 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。

这可以直接通过提取来完成,因为没有特定的日期时间功能。提取总是返回一个整数,这使处理变得更容易。