【问题标题】:Faster to use MySQL's CURDATE() or PHP's date()?更快地使用 MySQL 的 CURDATE() 或 PHP 的 date()?
【发布时间】:2011-05-24 16:48:38
【问题描述】:

使用mysql查询是否更快:

SELECT CURDATE() as today

或 PHP 语句:

$curdate = date('Y-m-d');

同样的答案是否适用于使用date() VS MySQL 的NOW()CURTIME()

【问题讨论】:

  • 我认为第一个在mysql上插入速度更快,第二个最好在php页面上显示日期而不是插入db
  • 请给我们更多的背景信息——您是在数据库中还是在 PHP 中对此进行处理?就目前而言,不可能做出决定。
  • 出于兴趣,你是想在这里重复乌龟把戏吗?

标签: php mysql


【解决方案1】:

如果您只是通过查询将日期输入到 PHP 脚本中,请使用 PHP 函数。在这两种情况下,PHP 和 MySQL 都会调用系统时钟,将该时间值转换为格式化字符串,然后返回它。 MySQL 版本将增加查询解析/编译的开销,以及从 PHP->MySQL->PHP 的往返。而且,如果您通过 TCP 套接字与 MySQL 通信,则会增加构建/发送/接收 TCP 连接和数据包的开销。

另一方面,如果您在查询中使用该数据值,则最好将其保留在 MySQL 中。例如,偶然的机会,您可能会在午夜之前立即启动一个脚本,以便 PHP 为其时间戳生成“May 24/2011 23:59:59.999”,但查询直到“May 25/2011”才在 MySQL 中执行00:00:00.001”,所以现在日期不匹配了。

【讨论】:

  • 如果我错了,请纠正我,但是添加到您的答案中,用户不会看到使用 PHP date() 的额外好处,因为对于 SELECT 语句,数据库可以在 CURDATE() 时缓存查询未使用?使用 MySQL 函数的 AFAIK 需要重新计算可能缓存的查询。
【解决方案2】:

这真的取决于。

将函数结果保存在其原生栖息地几乎总是更快。
如果要在 php 中使用日期,请使用 php date() 函数。

如果您要在查询中使用日期,请使用 MySQL NOW() 函数。

如果 php 和 MySQL 在不同的机器上运行,肯定将数据尽可能长时间地保存在每台机器中。网络上的往返将使所有其他考虑相形见绌。
尽量减少网络流量是一个很好的经验法则。

【讨论】:

    【解决方案3】:

    如果是 INSERT 语句,最好使用 mysql 内置函数,如果是 SELECT,使用 php 函数 'date();' 会更快。

    【讨论】:

    • 一般正确,但不一定:MySQL 查询中的函数是不可缓存的,因此对于 huge 表和带有WHERE somefield = CURDATE()complex 查询,它可能最好使用 PHP 中的日期(这有其自身的一组风险,请参阅例如 @Marc B's answer)。当然,这是一种极端情况,您应该始终衡量一下,看看这是否有任何好处。
    【解决方案4】:

    如果问题是“在 PHP 应用程序中,我应该通过mysql_query('SELECT CURDATE() as today') 还是通过$curdate = date('Y-m-d') 获取当前日期?”,那么一定要使用 PHP 语句 - 仅数据库往返的开销将使那一次调用相形见绌到一个简单的内置 PHP 函数(加上网络延迟,如果 appserver != dbserver),更不用说你需要额外的代码来获取 db 结果(mysql_fetch_*() 等)。

    你可以在家里试试这个;)并测量差异(我强烈推荐),但恕我直言date 每次都会更快,除非出现一些疯狂的复杂情况。

    【讨论】:

      【解决方案5】:

      PHP 更快。向 MySQL 发出查询只是为了查询当前日期/时间需要在 PHP 和正在运行的 MySQL 服务器之间进行数据往返,这对系统来说比 PHP 自己做的工作要多得多。

      【讨论】:

        【解决方案6】:

        导致两个平台之间通信最少的方法将是更快的方法。

        如果语句的结果要更新或插入数据库,请使用 CURDATE()。

        如果结果仅用于 PHP,请使用 date()。

        【讨论】:

          猜你喜欢
          • 2014-08-07
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-02-10
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多