【发布时间】:2014-01-25 22:47:15
【问题描述】:
我正在尝试优化我在 SQL/PHP 站点中使用日期的方式。我熟悉date() 和strtotime() 函数,并创建了在服务器端以unix 和日期时间存储数据的项目。我知道更改日期不会占用大量资源,但我正在尝试了解如何以最有效的方式编写代码。
我现在要解决的是最快/最有效的做法是在服务器上存储日期,即:SQL FROM_UNIXTIME、CONVERT、UNIX_TIMESTAMP 和 PHP strtotime 和 @ 的最有效组合是什么987654324@ 函数,用于涉及频繁 CRUD 日期字段的典型表。举个例子:
我有一个包含 3 个日期列的 SQL 表。所有这 3 个都可以由网站的多个用户定期更新,并且条目也输入如下:
mysql_query("INSERT INTO `regular` (
`regularid`,
`propertyid`,
`userid`,
`billdate`,
`billfrequency`,
`enddate`,
`amount`,
`description`,
`payee`,
`payer`,
`lastpayment`
)
VALUES (
'', '{$_POST['propertyid']}', '$varuserid', FROM_UNIXTIME($date), '{$_POST['billfrequency']}', 'FROM_UNIXTIME($edate)', '$amount', '{$_POST['description']}', '{$_POST['payee']}', '{$_POST['payer']}', 'FROM_UNIXTIME($ldate)'
)") or die(mysql_error);
Print "A regular payment for £".$_POST['amount']." has been created<br/>\n";
进入数据库,我将用户输入表单中的日期字段解析为 mm / dd / yyyy 格式的变量,使用 strtotime() 或 mktime() 函数对其进行验证,然后使用 from_unixtime 提交。
但是,然后显示我使用的数据库中的信息:
date("d-m-Y", strtotime($val['billdate']))
这意味着我从用户那里获取 dd/mm/yyyy 日期格式,从数据库获取另一种日期格式。然后我使用 strtotime 将这些转换为 unixtime,然后使用 date 将其转换回英国日期格式 - 这肯定会加倍吗?如果不是三倍?服务器查询。
我的问题分为两部分。 首先,它是最快的a)将所有日期格式存储在sql中的unixtime中并通过服务器端查询转换为日期格式,还是b)将所有日期格式存储为日期格式并仅在访问它们时转换为unixtime
(我认为后者最好,但我上面的示例表明,即使这样做,我似乎使用的服务器时间也比我应该使用的要多)
其次,您能否指出我应该如何执行自己的脚本时间基准测试的正确方向 - 我才真正开始了解测试,因为我对 Php 还比较陌生,但我很热衷学习。
非常感谢!
【问题讨论】:
-
您将数据与其表示混淆了。在你可以将它们分开之后 - 你不会有这样的问题
-
好问题。您必须考虑 MySQL 的
date函数及其日期存储格式已经针对高性能进行了优化。您最好以date格式存储日期,并仅在访问它们时转换为unixtime,因为 Unix 时间格式最适合操作系统级别的操作,而不是数据库存储。