在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()'函数在全世界都应该是绝对的输出吗?除非我误解了,那么当你将它解析为考虑时区的可读日期时,对吗? –