在清理公司旧代码时顺便做点性能优化,发现公司里有很多业务在用
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
的效率高出非常多的么?
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.