MySQL保存數據的時間類型想必很多是使用DATETIME(YYYY-MM-DD HH:MM:SS)的形式來保存的,因為看起來比較直觀,但是當使用WHERE條件檢索的時候,速度就比時間類型使用UNIX_TIMESTAMP類型保存時檢索的速度慢得多。
實驗環境假設數據庫已有100萬records,數據請求10條的平均時間作比較,服務器性能則因人而異。
-
DATETIME的情況
SELECT * FROM test_datetime WHERE datetime = '2013-10-03 21:00:00'; 處理時間2.99秒
-
TIMESTAMP的情況
SELECT * FROM test_unixtime WHERE unixtime = 1380805200; 處理時間0.74秒
使用TIMESTAMP這樣的INT型數據檢索擁有壓倒性的性能加速,其他附帶條件的檢索測試就不一一試了,按照原理,處理時間也應該是TIMESTAMP的情況完胜。
但是,使用UNIX_TIMESTAMP的INT形式來保存時間日期有一個問題,就是DATETIME理論上可以記錄時間到9999年12月31日,但帶符號的INT類型最大值只有是2147483647,就是只能記錄日期到2038年1月19日。不過使用不帶符號的INT類型來保存的話則可以記錄到2106年。有沒有一個數據庫可以支撐超過100年呢?反正人類都是著眼於眼前的問題,解決目前的事情就好了,不是嗎?所謂有辣有不辣,DATETIME和UNIX_TIMESTAMP用哪個就各自判斷吧。