
在清理公司旧代码时顺便做点性能优化,发现公司里有很多业务在用
select date_format(create_time, '%Y-%m-%d') dateDay, count(*) count from table GROUP BY date_format(create_time, '%Y-%m-%d') ORDER BY date_format(create_time, '%Y-%m-%d') 这样的语句全表扫描+日期转换。一个 47 万行的表这么跑一遍差不多 550-600ms 。而当我用 date(create_time) 换掉之后,耗时就会降到 230-300ms 。类似的还有用 CONCAT(YEAR(create_time), '-', MONTH(update_time)) dateMonth 替换 date_format(create_time, '%Y-%m') 之后,耗时也能减少 30%以上。对于 mysql 来说, date 这样的函数是比 date_format 的效率高出非常多的么?
1 gadfly3173 OP |
2 CRVV 2021-11-18 17:33:41 +08:00 date 函数做的时候基本上就是 timestamp / 86400 ,另外考虑一下闰秒,最多几次加减法吧 date_format 是 itoa(timestamp/365/24/3600) + itoa(timestamp/30/24/3600%(365*24*3600)) + ...... 还要考虑闰秒加闰年闰月这些 哪个函数更快应该很明显了 |