我想優化我在SQL/PHP站點中使用日期的方式。我熟悉date()
和strtotime()
函數,並創建了在unix和datetime中都在服務器端存儲數據的項目。我知道更改日期並不會佔用大量資源,但我正在嘗試以最有效的方式瞭解如何編寫代碼。在sql中存儲日期的最佳格式
我現在想要解決的是什麼最快/最有效的做法是將日期存儲在服務器上,即:什麼是SQL FROM_UNIXTIME,CONVERT,UNIX_TIMESTAMP和PHP strtotime
和date
函數的最有效組合對於包含日期字段的頻繁CRUD的典型表格。以下例子:
我有一個SQL表,其中包含3個日期列。所有這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']))
這意味着予取來自所述用戶的日/月/年的日期格式並從數據庫中的另一個。然後我使用strtotime將它們轉換爲unixtime,然後使用日期將它轉換回英式日期格式 - 這肯定會翻倍?如果不是三倍?服務器查詢。
我的問題分2部分。 首先,它是最快的a)以unixtime在sql中存儲所有日期格式,並通過服務器端查詢轉換爲日期格式,或b)以日期格式存儲所有日期格式並僅在訪問它們時轉換爲unixtime
(I我認爲後者會是最好的,但我上面的例子表明,即使這樣做,我似乎正在使用更多的服務器時間比我應該)
其次,你能指出我如何執行我的正確方向自己的時間基準腳本 - 我只是真正開始理解測試,因爲我對Php還是比較陌生的,但我很想學習。
非常感謝!
你混淆,其表示該數據被轉換成可讀的完整的日期內第二。在你將它們分開之後 - 你將不會有這樣的問題 – zerkms
好的問題在這裏。您必須考慮到MySQL的'日期'功能及其日期存儲格式已經針對高性能進行了優化。您最好以日期格式存儲日期,並且只有在訪問它們時才轉換爲'unixtime',因爲Unix時間格式最適合OS級操作,而不適用於數據庫存儲。 – Rachcha