MySql性能,FROM_UNIXTIME vs Parse在PHP中的日期字符串

时间:2017-05-22 21:49:53

标签: php mysql performance

在SO机器人中有类似的问题并不是我想知道的。

我有一个看起来像这样的插入语句:

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_timestampnow()?因为所有行的日期必须相同,而且我不进行单个插入,我将它分散在许多不同的较小插入语句中,所以实际上我的php看起来更像$time = $global_time_same_for_all_rows_not_exactly_now。换句话说,该时间被视为某种类型的导入键。

2 个答案:

答案 0 :(得分:1)

将date()分配给$ time,然后在多个insert语句中重复使用该变量将减少开销。

在php中使用time()然后在mysql中使用from_unixtime转换回日期时间是另外一个不必要的步骤。

答案 1 :(得分:1)

这个可能是优化的:

insert into my_table (id, time) values
    (1, NOW()),
    (2, NOW()), ...;

这是因为某些函数在语句之前被故意评估过一次 - NOW,UNIX_TIMESTAMP,UUID?和其他几个,但不是RAND。

但是,所有这些都是无关紧要的。执行行插入(或选择等)的开销远远超过执行from_unixtime(1495488539)或几乎任何其他简单函数所需的微不足道的时间。这可能是毫秒与亚微秒时间之间的差异。