在SO bot中也存在類似的問題,這不是我想知道的。MySql性能,從FROM_UNIXTIME vs PHP解析到日期字符串
我有一個INSERT語句看起來像這樣:
insert into my_table (id, time) values
(1, from_unixtime(1495488539)),
(2, from_unixtime(1495488539)),
...
(99, from_unixtime(1495488539)),
(100, from_unixtime(1495488539));
,這是獲得時間戳與PHP的,像這樣:$time = time()
。
它看起來像這個函數將被執行插入的每一行,它聽起來效率低下。
我的另一種選擇是產生在PHP這樣的時候:$time = date('Y-m-d H:i:s')
和我的插入語句如下所示:
insert into my_table (id, time) values
(1, '2017-05-22 21:28:59'),
(2, '2017-05-22 21:28:59'),
...
(99, '2017-05-22 21:28:59'),
(100, '2017-05-22 21:28:59');
那一個,因爲有每行沒有函數調用看起來簡單,但MySQL的仍然每次解析字符串,對吧?
問題是我應該使用哪種口味纔能有更好的表現?
爲什麼我不簡單地使用current_timestamp
或now()
?因爲所有行的日期必須相同,並且我不做一個單獨的插入,我將它分佈在許多不同的小插入語句中,所以實際上我的php看起來更像$time = $global_time_same_for_all_rows_not_exactly_now
。換句話說,那段時間被認爲有點像某種進口鑰匙。
你的第一個查詢是爲每一行調用'from_unixtime(1495488539)',這顯然比簡單插入一個字符串要慢。但是,除非要插入數十萬個值,否則這種差異可以忽略不計。 –
只是一個說明,但如果你的MySQL服務器和PHP服務器之間存在時區差異,我相信你的mysql from_unixtime(timestamp value)和php date函數可能會產生不同的結果。這就是說,它看起來像你正在使用日期時間字段,所以只是傳遞日期字符串可能更簡單。 – georaldc
@georaldc是否重要?不是php的'time()'函數在全世界都應該是絕對的輸出嗎?除非我誤解了,那麼當你將它解析爲考慮時區的可讀日期時,對嗎? –