› MySQL 5.5 Community Server
› MySQL 5.6 Community Server
› Percona Configuration Wizard
› XtraBackup 搭建主从复制
Great Sites on MySQL
› Percona
› MySQL Performance Blog
› Severalnines
推荐管理工具
› Sequel Pro
› phpMyAdmin
推荐书目
› MySQL Cookbook
MySQL 相关项目
› MariaDB
› Drizzle
参考文档
› http://mysql-python.sourceforge.net/MySQLdb.html
gadfly3173
V2EX  ›  MySQL

关于 MySQL 函数效率的疑问

  •  1
     
  •   gadfly3173 · Nov 18, 2021 · 3047 views
    This topic created in 1777 days ago, the information mentioned may be changed or developed.

    在清理公司旧代码时顺便做点性能优化,发现公司里有很多业务在用

    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 的效率高出非常多的么?

    2 replies  •  2021-11-18 17:33:41 +08:00
    gadfly3173
        1
    gadfly3173  
    OP
       Nov 18, 2021
    CRVV
        2
    CRVV  
       Nov 18, 2021   ❤️ 2
    date 函数做的时候基本上就是 timestamp / 86400 ,另外考虑一下闰秒,最多几次加减法吧

    date_format 是 itoa(timestamp/365/24/3600) + itoa(timestamp/30/24/3600%(365*24*3600)) + ......
    还要考虑闰秒加闰年闰月这些

    哪个函数更快应该很明显了
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   2271 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 15:48 · PVG 23:48 · LAX 08:48 · JFK 11:48
    ♥ Do have faith in what you're doing.